0

如果 cursor 为空/null ,我想添加一行。

但是我使用的代码不起作用:(错误:索引 -1 请求大小为 1)

               final String query = "SELECT  category.CategoryID, " +
                        "category.Title, category.ParentID " +
                        " FROM category" +
                        " WHERE category.Title = '"+ _TopCategory  
                        +"'";

                Cursor cursorKayita = db.rawQuery(query, null);

                if ( cursorKayita.moveToFirst() ) {
                    // start activity 
                } else {
                _Categories.put("Title", _TopCategory);
                 db.insert("category", null, _Categories);  

                }
4

2 回答 2

0

索引 -1 请求大小为 1

这是一个 CursorIndexOutOfBoundsException。您会看到此错误的唯一一次是当您尝试从 Cursor 读取数据而不调用moveToFirst()(或类似moveTo___()方法)时。但是在您发布的代码中,您没有尝试从光标中读取...

好消息是 LogCat 错误会为您提供发生此错误的行号,如果您在阅读 LogCat 时需要帮助,请单击问题下方的“编辑”以发布它。

于 2013-04-05T15:50:38.167 回答
0

您应该添加一行使该问题出现在光标上

try{
   Lite = open_bd(); //Open database
   Cursor x = Lite.query(/*Your query*/);

   if (x.getCount() != 0 && x != null) {
      x.moveToFirst();
      //Do your activity
   }else{
      _Categories.put("Title", _TopCategory);
      db.insert("category", null, _Categories);  
   }
}catch (Exception error) {
   //Whatever with your error
} finally {
   Lite.close();
}

这就是我管理游标的方式,因为当您询问游标是否为空时,我发现它们非常不稳定。它们可以为空,但并不总是为空

:D 希望有帮助


当您管理游标和数据库时,总是会执行类似的操作

where (cursor.getCount() < Xnumber){
   //code
}

与 if 相同,您应该使用“小于”而不是“小于或等于”,因为游标和数据库从 -1 索引开始读取。

看看这个:

for (int i = 0; i < x.getCount(); i++) {
   if (x.getInt(1) == 0) {
      //CODE
   }
   x.moveToNext();
}
于 2013-04-05T15:58:46.903 回答