如果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);
}
答案 0 :(得分:0)
索引-1请求大小为1
这是一个CursorIndexOutOfBoundsException。只有see this error尝试从Cursor中读取数据而不调用moveToFirst()
(或类似的moveTo___()
方法)时才会"edit"。但是你发布的代码中没有任何地方你试图从Cursor中读取...
好消息是,LogCat错误会为您提供发生此错误的行号,如果您在阅读LogCat时需要帮助,请点击问题下的{{3}}进行发布。
答案 1 :(得分: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相同,你应该使用“less-than”而不是“less-or-equal-than”,因为游标和数据库从-1索引开始读取。
看看这个:
for (int i = 0; i < x.getCount(); i++) {
if (x.getInt(1) == 0) {
//CODE
}
x.moveToNext();
}