Android 在标记上录音时强制关闭
我有以下代码,用于在录制标记时显示AlertDialog:Android 在标记上录音时强制关闭,android,sqlite,google-maps,google-maps-markers,Android,Sqlite,Google Maps,Google Maps Markers,我有以下代码,用于在录制标记时显示AlertDialog: public void showOverlay (OverlayItem overlay) { db = openHelper.getWritableDatabase(); String[] columns_descri = new String[] {COL_DESCRI}; Cursor cur = db.query(true, TABLE_COORD, colum
public void showOverlay (OverlayItem overlay)
{
db = openHelper.getWritableDatabase();
String[] columns_descri = new String[] {COL_DESCRI};
Cursor cur = db.query(true, TABLE_COORD, columns_descri,null, null, null, null, null, null);
String description = cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));
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();
db.close();
}
@Override
public boolean onTap(int index)
{
showOverlay(getItem(index)) ;
return super.onTap(index) ;
}
奇怪的是,我有一个带有logcat错误的FC:
08-24 20:51:42.466: ERROR/AndroidRuntime(265): Uncaught handler: thread main exiting due to uncaught exception
08-24 20:51:42.486: ERROR/AndroidRuntime(265): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4
有什么想法吗?
谢谢。首次创建光标时,其索引位于-1(列表开头之前)。在尝试从中检索任何数据之前,需要调用cur.moveToFirst()<如果光标为空,code>moveToFirst()也将返回false,这可能很有用:
public void showOverlay (OverlayItem overlay, int index)
{
db = openHelper.getWritableDatabase();
String[] columns_descri = new String[] {COL_DESCRI};
Cursor cur = db.query(true, TABLE_COORD, columns_descri,null, null, null, null, null, null);
if (cur.moveToPosition(index)) {
String description = cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));
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();
}
else {
//ERROR! cursor is empty, throw a toast or something
}
db.close();
}
问题与此相关(或基本相同):我用建议的解决方案编辑了代码,但我有4个alertdialogs,显示了相同的描述。我想它只是读取第一个索引,并显示“Description”列中我有多少条目,在我的例子中是4。还有其他想法吗?请保留您所在位置的索引,并改用
cur.moveToPosition()
。或者,您可以在每次使用后调用cur.moveToNext()
。我将使用moveToNext()
代码更新代码。只有当您想在一行中显示4个不同的对话框时,代码才会起作用,但是如果您想显示一个特定的对话框,您应该运行一个更好、更独特的查询,或者将要用于对话框的行的索引作为参数传递给moveToPosition())
。如果问题是您的代码显示了4个警报对话框,而不是1个,那么错误不在发布的代码中,而是来自其他地方。不过,我不完全确定您在评论中的意思。我正在更改代码,通过传入索引并使用moveToPosition()
,来显示如何使用该函数:(哦,天哪,我完全按照你说的做了,也遇到了同样的问题。我解释说:当我只点击一个标记时,我会同时显示6个具有相同描述的alertdialogs。不知道为什么,它不在循环中:\