SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
-
antonbright
- Сообщения: 56
- Зарегистрирован: 24 июн 2013, 18:50
Сообщение
antonbright » 11 июл 2013, 23:15
Добрый вечер. Вот у меня есть ЭкспЛистВЬю я хочу чтобы по нажатию на чайлд элемент его содержмиое(сейчас 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);
-
Foenix
- Сообщения: 4201
- Зарегистрирован: 20 окт 2012, 12:01
Сообщение
Foenix » 11 июл 2013, 23:23
да, ты прав, жирный код лучше заделать в класс (почитав уроки про базы данных) так было бы правильнее.
А что за ошибку выдает? код длинный, поконкретнее бы - лог можешь скопировать сюда, и на какой строчке выдает..?
-
antonbright
- Сообщения: 56
- Зарегистрирован: 24 июн 2013, 18:50
Сообщение
antonbright » 12 июл 2013, 20:16
Код: Выделить всё
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) {
}
}
-
Вложения
-
- test.rar
- (951.8 КБ) 203 скачивания