这个代码的替代方案?

时间:2011-08-24 16:28:37

标签: android sqlite google-maps google-maps-markers

我已经尝试了很多东西来使这个代码工作,它包括在从地图上录制元素/标记时显示AlertDialog / description。问题是4个标记中的3个有效(但没有显示正确的描述。它看起来像前一个),最后一个力用logcat错误关闭应用程序:

CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4

代码:

@Override
        protected boolean onTap(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);

            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();

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

            return true;
        }

2 个答案:

答案 0 :(得分:1)

你不应该直接使用索引,相反,你可能有一个适配器可以给你想要显示的对象或你的行的_id,你可以用来伪造一个精确的请求

修改

您正在使用ItemizedOverlay。因此,您可以通过以下方式获取已点按的项目:

public void onTap(int index) {
    Item item = getItem(index);
}

然后我想你可以从项目而不是光标中获取相关信息。

答案 1 :(得分:0)

只需使用cur.moveToPosition(index - 1);

即可