当我在数据库中搜索某些内容时,我正在使游标索引超出范围"索引0请求:大小为0"错误.我在我的数据库中搜索的项目目前不存在,我知道这一点,但我如何处理项目不存在的查询.
我发了一个电话号码
public String searchNumber(Context context,String number){
ContactDB db = new ContactDB(context);
db.open();
Cursor curs = db.getIdFromPhone(number);
String test = curs.getString(curs.getColumnIndex(db.PHONE_NUMBER)); //fails here
curs.close();
db.close();
return test;
}
Run Code Online (Sandbox Code Playgroud)
询问
public Cursor getIdFromPhone(String where){
Cursor cur = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER}
, PHONE_NUMBER + "='" + where + "'",null,null,null,null);
if(cur != null)
cur.moveToFirst();
return cur;
}
Run Code Online (Sandbox Code Playgroud)
测试搜索
from = messages.getDisplayOriginatingAddress();
String dbNumber = searchNumber(arg0,from);
if(dbNumber.equals(from)){
//do stuff
}else{
//do other stuff
}
Run Code Online (Sandbox Code Playgroud)
如果找不到数字,它应该执行else语句,但它没有那么远
Rob*_*ond 16
Cursor.moveToFirst()如果Cursor为空,则返回false .Cursor从query()调用返回的内容永远不会为null,但可能为空.你永远不会检查光标是否为空.
public String searchNumber(Context context,String number){
ContactDB db = new ContactDB(context);
db.open();
Cursor curs = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER}
, PHONE_NUMBER + "='" + number + "'",null,null,null,null);
String test = null;
if(curs.moveToFirst()) { //edit
test = curs.getString(curs.getColumnIndex(db.PHONE_NUMBER)); //fails here
}
curs.close();
db.close();
return test; // this will be null if the cursor is empty
}
Run Code Online (Sandbox Code Playgroud)
并摆脱该getIdFromPhone()方法.
当你追溯价值时,你必须使用 cursor.moveToNext;
if (cursor.moveToFirst()){
do{
String data = cursor.getString(cursor.getColumnIndex("data"));
// do what ever you want here
}while(cursor.moveToNext());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21862 次 |
| 最近记录: |