0

我想提出兩個值到使用列表和光標從SQLite數據庫一個微調行中,有我的代碼:CursorIndexOutOfBoundsException?

放入數據列表:

public List<String> getAllLabelsServer(){ 
     List<String> labels = new ArrayList<String>(); 



     // Select All Query 
     String selectQuery = "SELECT ip FROM " + ServerEntry.TABLE_NAME; 
     String description = "SELECT description FROM " + ServerEntry.TABLE_NAME; 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     Cursor cursor1 = db.rawQuery(description, null); 



     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       String multiRow = cursor.getString(0) + " - " + cursor1.getString(0); 
       labels.add(multiRow); 
      } while (cursor.moveToNext()); 
     } 

     // closing connection 
     cursor.close(); 
     db.close(); 

     // returning lables 
     return labels; 
    } 

從列表中添加數據,以微調:

private void loadSpinnerDataCommand() { 
     // database handler 
     DbHelper db = new DbHelper(getApplicationContext()); 

     // Spinner Drop down elements 
     List<String> labels = db.getAllLabelsCommand(); 

     // Creating adapter for spinner 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, labels); 

     // Drop down layout style - list view with radio button 
     dataAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // attaching data adapter to spinner 
     spinnerCommand.setAdapter(dataAdapter); 
    } 

但是,當我試圖讓cursor1.getString(0)有一個錯誤:

Process: com.example.admin.ssh, PID: 14389 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.admin.ssh/com.example.admin.ssh.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2684) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6186) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) at com.example.admin.ssh.data.DbHelper.getAllLabelsServer(DbHelper.java:108) at com.example.admin.ssh.MainActivity.loadSpinnerDataServer(MainActivity.java:222) at com.example.admin.ssh.MainActivity.onCreate(MainActivity.java:86) at android.app.Activity.performCreate(Activity.java:6684) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2637) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6186) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

我該如何解決這個錯誤?

+0

建議:使用ListView和數據庫時使用CursorAdapter –

回答

1

僅使用一個光標拿到兩列

String sql = "SELECT ip,description FROM " + ServerEntry.TABLE_NAME; 
SQLiteDatabase db = this.getReadableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 
while(cursor.moveToNext()) { 
    String multiRow = cursor.getString(cursor.getColumnIndex("ip")) + " - " + cursor.getString(cursor.getColumnIndex("description")); 
    labels.add(multiRow); 
} 
1

你只移動了第一條記錄你的光標中的一個(在一個名爲cursor)。

// looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      String multiRow = cursor.getString(0) + " - " + cursor1.getString(0); 
      labels.add(multiRow); 
     } while (cursor.moveToNext()); 
    } 

因此,第二個(一個命名爲cursor1)仍然指向索引-1

因此,例外。

Index -1 requested, with a size of 2 

我可以問你爲什麼地球在你執行2個不同的查詢,同時你可以得到所有與一個必填字段?

即:

String oneSingleQuery = "SELECT ip, description FROM " + ServerEntry.TABLE_NAME; 

然後你只需要處理一個單光標,也是如此。

相關問題