Страница 1 из 1

ExpandableList and SQL

Добавлено: 11 июл 2013, 23:15
antonbright
Добрый вечер. Вот у меня есть ЭкспЛистВЬю я хочу чтобы по нажатию на чайлд элемент его содержмиое(сейчас 1 слово name, в дальнейшем нужно будет массив) заносилось в базу данных то что я написал вызывает ошибку.Выкладываю мейн активити.

Код: Выделить всё

public class ExpandableListActivity extends Activity {

	private ExpandableListView expList;
	private ExpandableListAdapter expListAdapter;
	DBHelper dbHelper;
	private Resources res;
	
	/*
	 * (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.expandable_list_layout);
		
		expList = (ExpandableListView) findViewById(R.id.expandableList);
		
		expListAdapter = new ExpandableListAdapter(getApplicationContext());
		
		//removes the standard group state indicator
		expList.setGroupIndicator(null);
		dbHelper = new DBHelper(this);
		
		/*
		 * Setting up mock data
		 */
		ArrayList<TravelItem> futureItems = new ArrayList<TravelItem>();
		ArrayList<TravelItem> pastItems = new ArrayList<TravelItem>();
		
		res = getResources();
		
		for(int x = 0; x < res.getStringArray(R.array.future_titles).length; x++){
			TravelItem future = new TravelItem();
			future.setTitle(res.getStringArray(R.array.future_titles)[x]);
			future.setDeparture(res.getStringArray(R.array.future_departures)[x]);
			future.setDestination(res.getStringArray(R.array.future_destinations)[x]);
			future.setDate(res.getStringArray(R.array.future_dates)[x]);
			future.setTime(res.getStringArray(R.array.future_times)[x]);
			
			futureItems.add(future);
		}
		for(int zx = 0; zx < res.getStringArray(R.array.past_titles).length; zx++){
			TravelItem past = new TravelItem();
			past.setTitle(res.getStringArray(R.array.past_titles)[zx]);
			past.setDeparture(res.getStringArray(R.array.past_departures)[zx]);
			past.setDestination(res.getStringArray(R.array.past_destinations)[zx]);
			past.setDate(res.getStringArray(R.array.past_dates)[zx]);
			
			pastItems.add(past);
		}
		
		//send data to adapter
		expListAdapter.setupTrips(pastItems, futureItems);
		//tie the adapter to our expandable list view
		expList.setAdapter(expListAdapter);
		
		/*
		 * if there is at least one child, expand the first
		 * group by default.  (future travel plans)
		 */
		if(expListAdapter.getChildrenCount(0) >= 1){
			expList.expandGroup(0);
		}
		
		/*
		 * override the onGroupClick method to make sure the
		 * first group (future travel plans) does not collapse
		 * or expand.
		 */
		[b]expList.setOnChildClickListener(new OnChildClickListener() {
		      public boolean onChildClick(ExpandableListView parent, View v,
		          int groupPosition,   int childPosition, long id) {
		    	  ContentValues cv = new ContentValues();
		    	  SQLiteDatabase db = dbHelper.getWritableDatabase();
		    	 String name = getString(R.array.past_titles);
		    	  cv.put("name", name);
		          
		          // вставляем запись и получаем ее ID
		          db.insert("mytable", null, cv);[/b]
		          
		        return false;
		      }
		    });
		
		expList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
			
			@Override
			public boolean onGroupClick(ExpandableListView parent, View v,
					int groupPosition, long id) {
				if(groupPosition == 0){
					return true;
				} else {
					return false;
				}
			}
		});
	}

}

ПС я разобрался с этими темами по отдельности, но как их соединить ума не приложу, поэтому мой код выделенный жирным может повергнуть в шок. Заранее спасибо

expList.setOnChildClickListener(new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
ContentValues cv = new ContentValues();
SQLiteDatabase db = dbHelper.getWritableDatabase();
String name = getString(R.array.past_titles);
cv.put("name", name);

// вставляем запись и получаем ее ID
db.insert("mytable", null, cv);

Re: ExpandableList and SQL

Добавлено: 11 июл 2013, 23:23
Foenix
да, ты прав, жирный код лучше заделать в класс (почитав уроки про базы данных) так было бы правильнее.
А что за ошибку выдает? код длинный, поконкретнее бы - лог можешь скопировать сюда, и на какой строчке выдает..?

Re: ExpandableList and SQL

Добавлено: 12 июл 2013, 20:16
antonbright

Код: Выделить всё

07-12 17:14:22.063: D/myLogs(333): --- onCreate database ---
07-12 17:14:22.063: I/Database(333): sqlite returned: error code = 1, msg = near ")": syntax error
07-12 17:14:22.063: E/Database(333): Failure 1 (near ")": syntax error) on 0x2c8780 when preparing 'create table mytable (id integer primary key autoincrement,name text,);'.
07-12 17:14:22.073: D/AndroidRuntime(333): Shutting down VM
07-12 17:14:22.073: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception (group=0x40015560)
07-12 17:14:22.093: E/AndroidRuntime(333): FATAL EXCEPTION: main
07-12 17:14:22.093: E/AndroidRuntime(333): android.database.sqlite.SQLiteException: near ")": syntax error: create table mytable (id integer primary key autoincrement,name text,);
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at com.android.expandablelistexample.DBHelper.onCreate(DBHelper.java:19)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at com.android.expandablelistexample.ExpandableListActivity$1.onChildClick(ExpandableListActivity.java:89)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.os.Handler.handleCallback(Handler.java:587)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.os.Handler.dispatchMessage(Handler.java:92)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.os.Looper.loop(Looper.java:123)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at java.lang.reflect.Method.invoke(Method.java:507)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-12 17:14:22.093: E/AndroidRuntime(333): 	at dalvik.system.NativeStart.main(Native Method)
DBHElper

Код: Выделить всё

package com.android.expandablelistexample;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

class DBHelper extends SQLiteOpenHelper {
String LOG_TAG="myLogs";
    public DBHelper(Context context) {
      // конструктор суперкласса
      super(context, "myDB", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
      Log.d(LOG_TAG, "--- onCreate database ---");
      // создаем таблицу с полями
      db.execSQL("create table mytable ("
          + "id integer primary key autoincrement," 
          + "name text,"
          + ");");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
  }