2010-12-09 164 views
8

現在我正在使用sqllite所有存儲的JSON values.The值JSON應用程序被正確地存儲和我對下面的錯誤sqllite獲取數據時發生,請幫我...如何解決CursorIndexOutOfBoundsException

12-09 13:51:22.808: ERROR/AndroidRuntime(217): Uncaught handler: thread main exiting due to uncaught exception 
12-09 13:51:22.808: ERROR/AndroidRuntime(217): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:172) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at ez.com.Action_module_screen.setListval1(Action_module_screen.java:1059) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at ez.com.Action_module_screen$4.handleMessage(Action_module_screen.java:695) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.os.Looper.loop(Looper.java:123) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
12-09 13:51:22.808: ERROR/AndroidRuntime(217):  at dalvik.system.NativeStart.main(Native Method) 

這是我的出處:

    Cursor curser=myDB.rawQuery("select * from "+TABLE_NAME+"",null); 
if(curser.moveToFirst()) 
    { 
     int k=0; 
     System.out.println("enter first"); 
     do 
     { 
     System.out.println("enter second"); 
     if(status1==true) 
     { 
     System.out.println("enter third"); 
     for(int i=0;i<items.length;i++) 
     { 
     System.out.println("item"+items.length); 
     System.out.println("enter fourth"); 
     Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where Status='"+items[i]+"'", null); 
     System.out.println("enter fifth"); 
     int title=curser.getColumnIndex("Title"); 
     String tit=curser.getString(title); 
     System.out.println("value"+tit); 

    /* String title1=dbcur.getString(dbcur.getColumnIndex("Title")); 
     System.out.println("title"+title1); 
     String name1=dbcur.getString(dbcur.getColumnIndex("Name")); 
     System.out.println("name"+name1); 
     String open1=dbcur.getString(dbcur.getColumnIndex("Open")); 
     System.out.println("open"+open1); 
     String close1=dbcur.getString(dbcur.getColumnIndex("Close")); 
     System.out.println("close"+close1); 
     String no1=dbcur.getString(dbcur.getColumnIndex("No")); 
     System.out.println("no"+no1); 
     no.add(no1+","+k); 
    first.put(no1+","+k, title1); 
    second.put(no1+","+k,name1); 
    third.put(no1+","+k, open1); 
    fourth.put(no1+","+k,close1); 
    k=k+1; 
    mylist=sorting(no,1,true); */ 

    } 

     } 


     }while(curser.moveToNext()); 
    } 
    curser.close(); 
    myDB.close(); 

      } 

回答

4

你的光標「curser」是什麼定義的?你可以請張貼它

編輯: 正如我所看到的,你的第二個光標dbcur沒有放置在任何位置,所以它在他的頂部位置-1。請嘗試使用dbcur.moveToFirst()dbcur.moveToNext()

+0

我已經加了我新的代碼......... – user533787 2010-12-09 09:48:30

+0

我所看到的,你的第二個光標dbcur ISN」放置在任何位置,所以它處於最高位置-1。請嘗試將它與movetofirst()或movetonext()一起放置。 – Thrawn80 2010-12-09 09:53:47

0

我只選擇狀態value.so只有一個光標是不夠....下面的代碼工作正確放置........

正確的代碼:

Cursor dbcur = myDB.rawQuery("select * from "+TABLE_NAME+" where Status='"+items[i]+"'", null); 
       if(dbcur.moveToFirst()) 
        { 
         int k=0; 
         System.out.println("enter first"); 
         do 
         { 

         String title1=dbcur.getString(dbcur.getColumnIndex("Title")); 
         System.out.println("title"+title1); 
         String name1=dbcur.getString(dbcur.getColumnIndex("Name")); 
         System.out.println("name"+name1); 
         String open1=dbcur.getString(dbcur.getColumnIndex("Open")); 
         System.out.println("open"+open1); 
         String close1=dbcur.getString(dbcur.getColumnIndex("Close")); 
         System.out.println("close"+close1); 
         String no1=dbcur.getString(dbcur.getColumnIndex("No")); 
         System.out.println("no"+no1); 
         no.add(no1+","+k); 
         first.put(no1+","+k, title1); 
         second.put(no1+","+k,name1); 
         third.put(no1+","+k, open1); 
         fourth.put(no1+","+k,close1); 
         k=k+1; 
         mylist=sorting(no,1,true); 

         }while(dbcur.moveToNext()); 
        } 
        dbcur.close(); 
        myDB.close(); 
22

要麼你做

if(cursor.moveToFirst() && cursor.getCount() >= 1){ 
    do{ 
    .... 
     .... 

}while(cursor.moveToNext()); 

OR你可以做

if(cursor.getCount() >= 1){ 
    while(cursor.moveToNext()){ 
     .... 
     .... 

} 

光標是在指數-1 intially位置