Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在标记上录音时强制关闭_Android_Sqlite_Google Maps_Google Maps Markers - Fatal编程技术网

Android 在标记上录音时强制关闭

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

我有以下代码,用于在录制标记时显示AlertDialog:

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。不知道为什么,它不在循环中:\