Android 3.0无法从光标窗口读取#行#列

Jon*_*han 6 window cursor android-3.0-honeycomb

我有一个在Android 2.1上运行良好的应用程序,但在尝试将其转换为3.0时,我得到一个我不熟悉的游标错误.

Java.lang.IllegalStateException :无法从光标窗口读取row0,第-1列.确保光标在从中访问数据之前已正确初始化.

所有数据都存储在SQLite数据库中,这段代码在android 2.1中运行良好.是否必须在android 3.0中以不同方式初始化游标?

下面列出的是我的代码.

private void OpenGroupData(){
SQLiteDatabase db = openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE,null);
Cursor cur = db.rawQuery("SELECT groupid FROM properties GROUP BY GroupID" + ";" , null);
LinearLayout glayout = (LinearLayout) findViewById(R.id.Grouplayout);
LinearLayout gwindow = (LinearLayout) findViewById(R.id.groupwindow);

TextView data = new TextView(this);
glayout.addView(data);
data.setText("");
int ID = cur.getColumnIndex("groupid");
int idvalue;

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

try{
    // Check if our result was valid.
    cur.moveToFirst();
    if (cur != null) {

        // Loop through all Results
        do {data = new TextView(this);
            data.setTextSize(20);
        data.setClickable(true);
        data.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
              GroupClick(v);
            }
          });
        glayout.addView(data);
        idvalue = cur.getInt(ID);
        data.setId(idvalue);
        data.setText("Group: " + idvalue);
        }while(cur.moveToNext());
        } 
        cur.close();
        db.close();
        }   catch(Exception e) {
            Toast.makeText(getApplicationContext(), "Open Group Exception: " + e.toString(), Toast.LENGTH_SHORT).show();
        }
 }
Run Code Online (Sandbox Code Playgroud)

Jon*_*han 1

好吧,我想通了。由于某种原因,当我尝试将我的应用程序转换到 3.0 时,当我的光标移动并获取字段的列索引时,在本例中(“groupid”)它返回值 -1。当游标尝试从 -1 开始时,它会崩溃,因为它在行(0)、列(-1)处找不到记录。所以我的解决方法是在获取 id 时仅向列索引添加 1。见下文。

 int ID = cur.getColumnIndex("groupid") + 1;
 int idvalue;
Run Code Online (Sandbox Code Playgroud)

通过将 1 添加到列索引,似乎已经解决了问题。