2011-08-23 61 views
1

我希望顯示有一些說明各廠商的AlertDialog,對於這一點,我使用這個代碼:CursorIndexOutOfBoundsException問題:指數4請求,大小爲4

protected boolean onTap(int index) { 
      db = openHelper.getWritableDatabase(); 

      String[] result_columns = new String[] {COL_DESCRI}; 

      Cursor cur = db.query(true, TABLE_COORD, result_columns, 
      null, null, null, null, null, null); 

       cur.moveToPosition(index); 
       String description = cur.getString(cur.getColumnIndexOrThrow("description")); 

       AlertDialog.Builder dialog = new AlertDialog.Builder(Geo.this); 
       dialog.setTitle("Infos."); 
       dialog.setMessage(description); 
       dialog.setPositiveButton("OK", new OnClickListener() {  
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       dialog.show(); 

       //cur.moveToNext(); 

      cur.close(); 
      db.close(); 

      return true; 
     } 

的問題,有是alertdialog結果是正確的一些標記,還有一些其他的,當我點擊它時,我有一個FC。 logcat的:

08-23 17:41:37.531: ERROR/AndroidRuntime(10004): Uncaught handler: thread main exiting due to uncaught exception 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004): android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at carburant.android.com.Geo$ItemizedOverlayPerso.onTap(Geo.java:244) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:346) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.GestureDetector.onTouchEvent(GestureDetector.java:506) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.google.android.maps.MapView.onTouchEvent(MapView.java:628) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.View.dispatchTouchEvent(View.java:3709) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.os.Looper.loop(Looper.java:123) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):  at dalvik.system.NativeStart.main(Native Method) 

當我把cur.moveToPosition(index);String description = cur.getString(cur.getColumnIndexOrThrow("description"));下我有Index -1 requested, with a size of 4否則,像上面的代碼Index 4 requested, with a size of 4

+0

負指數似乎是拋出CursorIndexOutOfBoundsException的一個合理理由,爲什麼你有負指數? – VirtualTroll

回答

3

數組索引開始與0,不1。您的第四個元素存儲在索引3

當我把cur.moveToPosition(index);在String description = cur.getString(cur.getColumnIndexOrThrow(「description」));我索引-1請求,其他大小爲4,否則像上面的代碼索引4請求,大小爲4

當行集合第一次返回時,遊標將位於-1,這是在第一行之前。

+0

那麼,我該如何解決這個問題? – androniennn

+0

cur.moveToPosition(index-1); – Rayne

+0

這樣做,但我總是有一個FC,但與其他標記:'08-24 00:57:16.549:錯誤/ AndroidRuntime(365):android.database.CursorIndexOutOfBoundsException:請求索引-1,大小爲4 ' – androniennn

0

錯誤是,當然在代碼String description = cur.getString(cur.getColumnIndexOrThrow("description"));,因爲你還沒有這樣的列。你只有COL_DESCRI列,這可能不只是打電話
Cursor cur = db.query(true, TABLE_COORD, result_columns, null, null, null, null, null, null);

光標將在-1位置匹配後「說明」

+0

不,我驗證了我的描述欄。我不認爲這是問題的根源。 – androniennn

+0

是否嘗試過這段代碼cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));你也可以直接運行String ... = db.rawQuery(「SELECT ...;」,null); – LackOfKnowledge

+0

根據API參考,_getColumnIndexOrThrow()_僅拋出_IllegalArgumentException_而不拋出_android.database.CursorIndexOutOfBoundsException_。 – Rayne

1

,如果你獲取數據時,光標在這個異常會來 - 1指數。
當您第一次調用cur.moveToPosition(index-1);時,您的索引值可能爲0,即問題所在。