有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么sqlite看起来无法在设备中运行?

我正在使用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: 安卓.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at 安卓.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at 安卓.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:172)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at 安卓.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at com.安卓.imammuda.Program.createGroupList(Program.java:104)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at com.安卓.imammuda.Program.filldata(Program.java:66)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at com.安卓.imammuda.Program.onCreate(Program.java:30)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
05-11 16:20:38.354: ERROR/AndroidRuntime(15076):     at 安卓.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) 个答案

  1. # 1 楼答案

    您尚未将光标移动到查询结果的特定行。试试这个:

    if (cursor.moveToFirst())
        title[i] = cursor.getString(0);