如果行id不存在,则返回一个字符串

时间:2015-09-15 01:43:37

标签: android sqlite

这里我有方法根据表中的id_number / number获取人员的状态。如果存在人员编号,则会返回其状态,如PENDINGACCEPTED

但是它不存在,它应该返回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

2 个答案:

答案 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;