这里我有方法根据表中的id_number / number获取人员的状态。如果存在人员编号,则会返回其状态,如PENDING
或ACCEPTED
。
但是它不存在,它应该返回NONE
的字符串。该代码仅在数字存在时有效,但如果数字不存在则返回ArrayIndexOutOfBounds;
如何阻止ArrayIndexOutOfBounds
,以便在数字不存在时返回字符串NONE
的值。
public String getStatus(int number) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.query(TABLE_NAME, new Sting[] {KEY_NUMBER,
KEY_FULLNAME, KEY_STATUS}, KEY_NUMBER + "=?",
new String[] {String.valueOf(number)}, null, null, null, null);
if(cursor != null) {
cursor.moveToFirst();
String status = cursor.getString(cursor.getColumnIndex("remark");
return status;
}
}
我称这种方法是这样的;
String text = db.getStatus(100);
if(text.equals(null){
Log.e("Null: ", "null");
} else
Log.e("exist", "exist");
如果此数字不存在,它将崩溃并且logcat显示ArrayIndexOutOfBounds
答案 0 :(得分:1)
您需要检查Cursor
是否已返回任何行。您可以通过选中cursor.getCount() > 0
来执行此操作,或者如果您需要遍历Cursor
,则可以执行以下操作:
while (cursor.moveToNext()){
//Do your code
return "Something";
}
return "NONE";
答案 1 :(得分:0)
public abstract boolean moveToFirst()
在API级别1中添加将光标移动到第一行。
如果光标为空,此方法将返回false。
返回移动是否成功。
您没有使用 moveToFirst()
的返回值BTW,最好返回null而不是显式字符串值“NONE”,因为与null的比较更快。您的代码应更改为
if(cursor != null && cursor.moveToFirst())
String status = cursor.getString(cursor.getColumnIndex("remark");
return status;
}
return null;