我想为每个制造商显示一个具有一些描述的AlertDialog,为此,我使用以下代码:
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;
}问题是,有一些标记表明there对话框的结果是正确的,还有一些标记表明当我点击它时,我有一个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代码一样
发布于 2011-08-24 01:45:32
数组索引从0开始,而不是1。第四个元素存储在索引3中。
当我放入索引时索引;在String description = cur.getString(cur.getColumnIndexOrThrow("description"));下,我请求了索引-1,大小为4;否则,就像上面的代码那样,请求索引4,大小为4
当第一次返回行集时,游标将位于第一行之前的位置-1。
发布于 2012-12-07 22:10:02
刚打完电话
Cursor cur = db.query(true, TABLE_COORD, result_columns, null, null, null, null, null, null);
用户的游标将在-1 \f25 -1 \f6位置上,如果在-1\f25-1\f25 cursor -1\f6在-1\f25-1\f25 index -1\f6上时获取数据,则会出现此异常。
当您第一次调用cur.moveToPosition(index-1);时,索引值可能是0,这就是问题所在。
发布于 2011-08-24 01:46:15
错误是,当然是在代码String description = cur.getString(cur.getColumnIndexOrThrow("description"));中,因为您没有这样的列。您只有description列,可能与COL_DESCRI不匹配
https://stackoverflow.com/questions/7165227
复制相似问题