Запрашиваете поставщика контента, у которого нет записей?

Я работаю над методом, который запрашивает поставщика контента с помощью курсора. После удаления записи он вызывает метод loadfromProvider и обновляет список массивов. Однако у поставщика контента обычно есть записи, когда я удаляю все записи и запрос запускается автоматически, он генерирует исключения. Вот мой метод:

private void loadFromProvider() {

    // Clear the existing array list

    EQlist.clear();

      ContentResolver cr = getContentResolver();

      // Return all the saved records
      Cursor c = cr.query(EQProvider.CONTENT_URI, null, null, null, null);

      if (c.moveToFirst()) {
        do { 

          String details = c.getString(EQProvider.DETAILS_COLUMN);
          String linkString = c.getString(EQProvider.LINK_COLUMN);

          EQli q = new EQli(details, linkString);
          addEQToArray(q);
        } while(c.moveToNext());
      }
      c.close();
      }

Когда я запускаю это без записей в поставщике контента, он выдает следующее:

java.lang.IndexOutOfBoundsException: неверный индекс 1, размер равен 1 в java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:257)

Я думаю, это связано с тем, что курсор пытается проанализировать нулевое значение. Я пытаюсь найти способ, которым, если курсор не возвращается ни с какими записями, он обходит остальную часть кода и ничего не происходит.

Любая помощь будет оценена по достоинству. Спасибо


person Jeff    schedule 30.03.2011    source источник


Ответы (1)


Если записей нет, ваш курсор должен быть пустым. Если курсор пуст, то c.moveToFirst() вернет false, и вы не будете входить в цикл do-while.

Отладьте свое приложение и убедитесь, что курсор пуст.

person mgv    schedule 30.03.2011
comment
верно. См. также: stackoverflow.com/questions/5122099/ для соответствующего обсуждения. В данном случае я думаю, что ошибка возникает позже в коде. Вы проваливаетесь через блок if(), выполняете c.close() и, возможно, получаете ошибку позже, пытаясь использовать пустой набор данных, который вы (не) заполнили. - person jcwenger; 10.04.2011