Я использую sqlite, который является sqliteopenhelper
все нормально работает в моем эмуляторе, даже удаляй и вставляй данные снова. после этого покажи без проблем.
но я установил файл apk в устройство, у него возникла проблема, он может вставить данные, но когда я хочу показать это, он дал мне ошибку приложения (принудительное включение).
в чем проблема?
мой код sqliteopenhelper
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE_PROGRAM);
db.execSQL(DATABASE_CREATE_CANDIDATE);
db.execSQL(DATABASE_CREATE_VIDEO);
db.execSQL(DATABASE_CREATE_COMMENT);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion >= newVersion)
return;
String sqlprogram = null;
String sqlcandidate = null;
String sqlvideo = null;
String sqlcomment = null;
if (oldVersion == 1) {
sqlprogram = "alter table " + TABLE_PROGRAM + " add note text;";
sqlcandidate = "alter table " + TABLE_CANDIDATE + " add note text;";
sqlvideo = "alter table " + TABLE_VIDEO + " add note text;";
sqlcomment = "alter table " + TABLE_COMMENT + " add note text;";
}
if (oldVersion == 2){
sqlprogram = "";
sqlcandidate = "";
sqlvideo = "";
sqlcomment = "";
}
if (sqlprogram != null)
db.execSQL(sqlprogram);
if (sqlcandidate != null)
db.execSQL(sqlcandidate);
if (sqlvideo != null)
db.execSQL(sqlvideo);
if (sqlcomment != null)
db.execSQL(sqlcomment);
}
мой другой класс, который имеет доступ к openhelper
public SQLite open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getReadableDatabase();
return this;
}
мой бревенчатый
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:172)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at com.android.imammuda.Program.createGroupList(Program.java:104)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at com.android.imammuda.Program.filldata(Program.java:66)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at com.android.imammuda.Program.onCreate(Program.java:30)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
это функция
private List createGroupList() {
ArrayList result = new ArrayList();
String[] title = new String[11] ;
Cursor cursor;
int datarow = sqlite.getDataRow(DatabaseHelper.TABLE_PROGRAM);
if(datarow == 0){
for(int i = 1; i <= 1; i++){
HashMap m = new HashMap();
m.put(DatabaseHelper.KEY_PROGRAM_TITLE, "Tiada Rancangan !!!");
result.add( m );
}
}else{
for( int i = 1 ; i <= datarow; ++i ) {
cursor = sqlite.fetchdata(i, DatabaseHelper.TABLE_PROGRAM);
startManagingCursor(cursor);
title[i] = cursor.getString(0);
HashMap m = new HashMap();
m.put(DatabaseHelper.KEY_PROGRAM_TITLE, title[i]);
result.add( m );
}
}
return result;
}
сначала приложения пустые данные, затем я вызываю функцию вставки
public void onClick(View view){
if(!(title.getText().toString().trim().equals("")) && !(date.getText().toString().trim().equals("")) &&
!(time.getText().toString().trim().equals("")) && !(channel.getText().toString().trim().equals(""))){
sqlite.createProgramData(titletext, datetext, timetext, channeltext);
int rownumber = sqlite.getDataRow(DatabaseHelper.TABLE_PROGRAM);
Toast.makeText(getBaseContext(), "You had successfully added a record! \n It currently have " + rownumber + " program(s)!", Toast.LENGTH_SHORT).show();
finish();
}
filldata ()
private void filldata(){
Cursor datacursor = sqlite.fetchalldata("Program");
startManagingCursor(datacursor);
String[] from = new String[]{DatabaseHelper.KEY_PROGRAM_DATE, DatabaseHelper.KEY_PROGRAM_TIME, DatabaseHelper.KEY_PROGRAM_CHANNEL};
String[] from1 = new String[]{DatabaseHelper.KEY_PROGRAM_TITLE};
int[] to = new int[]{R.id.programdate, R.id.programtime, R.id.programchannel};
int[] to1 = new int[]{R.id.programtitle};
SimpleExpandableListAdapter SEL = new SimpleExpandableListAdapter(this,
createGroupList(), R.layout.programgroup_row, from1, to1,
createChildList(), R.layout.programchild_row, from, to);
setListAdapter( SEL );
}