2015-10-13 2 views
0

Я использую следующий код:не в состоянии извлечь данные из контактов дб

preparePeople(); 
final Cursor c = mContext.getContentResolver().query(People.CONTENT_URI, mPROJECTION, null, null, null); 
String s = c.getString(1); 

private void preparePeople() { 
    final ContentResolver mResolver = mContext.getContentResolver(); 
    mResolver.delete(People.CONTENT_URI, null, null); 
    final ContentValues valuse = new ContentValues(); 
    valuse.put(People._ID, "1"); 
    valuse.put(People.NAME, "name"); 
    Uri uri = mResolver.insert(People.CONTENT_URI, valuse); 
} 

Но при выполнении приведенного выше кода я получаю исключение, как показано ниже:

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 

Это происходит из-за до c.getString (1) заявление в соответствии с журналами, но я не знаю, почему .. кто-нибудь может помочь устранить эту ошибку?

+1

change 'String s = c.getString (1);' to 'String s = c.getString (0);' –

+0

@MD, то же проблема с getString (0) также выводит: android.database.CursorIndexOutOfBoundsException : Запрошенный индекс 0 с размером 0 – KayPee

ответ

4

Во-первых, Cursor позиционируется перед первым рядом результатов, когда вы его впервые получите. Позвоните moveToFirst() или moveToPosition() или что-то переместить Cursor в строку, которую вы хотите.

Во-вторых, столбцы в Cursor нумеруются начиная с 0, как и большинство вещей в программировании. Если у mPROJECTION есть 2+ записи, и вы действительно хотите, чтобы с индексом 1 вы, вероятно, захотите позвонить по номеру getString(0), как указывает MD в комментарии.

В-третьих, имейте в виду, что there are cases where you might not get any results back, чтобы вы могли проверить, сколько строк вы вернули с вашего query(), прежде чем продолжить.

+0

после вызова moveToFirst() также проблема сохраняется, когда я пытаюсь получить значение getString (0), у моего mPROJECTION есть 2 записи, и теперь напечатан журнал: android.database.CursorIndexOutOfBoundsException : Запрошен индекс 0, с размером 0 – KayPee

+0

@KayPee: вы не получаете никаких строк для вашего запроса, по-видимому. – CommonsWare

+0

yes @CommonsWare, и я также ссылался на https://commonsware.com/blog/2015/10/12/runtime-permissions-action-pick-contacts.html, но, похоже, в моем случае нет разрешения. – KayPee