Указатель курсора за пределами границ "индекс 0 запрошен: с размером 0"

Я получаю указатель курсора за пределами «ошибка 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; } 

запрос

 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; } 

Тестовый поиск

 from = messages.getDisplayOriginatingAddress(); String dbNumber = searchNumber(arg0,from); if(dbNumber.equals(from)){ //do stuff }else{ //do other stuff } 

Если номер не найден, он должен делать оператор else, но он не так далеко

Solutions Collecting From Web of "Указатель курсора за пределами границ "индекс 0 запрошен: с размером 0""

Cursor.moveToFirst() возвращает false, если Cursor пуст. Cursor из вызова query() никогда не будет пустым, но может быть пустым. Вы никогда не проверяете, пуст ли курсор.

 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 } 

И избавиться от getIdFromPhone() .

Пока вы извлекаете значение, вам нужно использовать cursor.moveToNext;

 if (cursor.moveToFirst()){ do{ String data = cursor.getString(cursor.getColumnIndex("data")); // do what ever you want here }while(cursor.moveToNext()); } в if (cursor.moveToFirst()){ do{ String data = cursor.getString(cursor.getColumnIndex("data")); // do what ever you want here }while(cursor.moveToNext()); }