Intereting Posts
Как восстановить положение прокрутки текста после поворота экрана? Почему мы используем 10.0.2.2 для подключения к локальному веб-серверу вместо использования IP-адреса компьютера в Android-клиенте Как я могу запретить кому-либо общаться с моим сервером, кроме моего Android-приложения Чувствительность прохождения в Ionic Slidebox + Android 4.4.4 Ошибка AndEngine при загрузке библиотеки Android / Java Append String + int Пользовательский inputType / key, установленный для мягкой клавиатуры Android Мое приложение было отклонено из игры Google из-за некоторой проблемы с сетевой политикой? Могу ли я подключить Android (Eclipse) к SQL Server (2005) с помощью веб-служб php? После удаления apk, когда я запускаю Debug, он сообщает мне, что пакет не установлен Выбор фотографии из галереи и просмотр на изображении Групповое тестирование Android с Maven Не удается проверить мою сборку AOSP на эмуляторе Как изменить цвет линии разделителя Android ListView? Robolectric + rxJava + retrofit Второй вызов вызывает java.io.InterruptedIOException

Указатель курсора за пределами границ "индекс 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, но он не так далеко

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