почему sqlite не работает в устройстве? - PullRequest
0 голосов
/ 10 мая 2011

Я использую 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 );
}

1 Ответ

0 голосов
/ 10 мая 2011

Вы не переместили курсор на конкретную строку результатов вашего запроса.Попробуйте это:

if (cursor.moveToFirst())
    title[i] = cursor.getString(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...