Android nullpointerexception в .indexOf ()

1

У меня есть приложение на рынке, но в некоторых случаях оно закрывается при открытии. Согласно ошибке сбоя что-то не так с командой indexOf (NullPointerException). Часть кода:

contactName = null;
Context context = getApplicationContext();
Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
myArr.add("");

while (cursor.moveToNext())
{
    contactName  = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    spaceIndex =  contactName.indexOf(' '); //this is the bad row
    spaceLastIndex =  contactName.lastIndexOf(' ');
    myArr.add(contactName);
}

Я тестирую свое приложение на 3 разных телефонах, приложение работает нормально. Поэтому я не могу проверить код, если я что-то изменил, поскольку я не мог сказать разницы. Что может вызвать ошибку и почему она возникает только на нескольких телефонах? (5% загрузок). Парень связался со мной с этой ошибкой, есть несколько контактов со специальными персонажами в его телефоне (HTC Legend CM 7.1 и Vodafone 845 Android 2.1). Поэтому я добавил тех же персонажей к моему контакту, поместил пробелы перед именем, попробовал все, чтобы возиться с именем контакта, приложение работает гладко, так что это не проблема. Я из вариантов.

Теги:
contact

3 ответа

1
Лучший ответ

Вы должны проверить имя контакта, если оно не равно нулю. Я думаю, что столбец, из которого вы пытаетесь получить значение, просто пуст.

if (contactName != null) {... и так далее

  • 0
    if (contactName! = "") тоже хорошо?
  • 0
    Я принимаю это как первый ответ
Показать ещё 1 комментарий
1
contactName  = cursor.getString(cursor.getColumnIndexorThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

Даже отображаемое имя может быть пустым для некоторых случаев... скажем, пустой контакт..

поэтому проверьте, является ли contactName нулевым или не первым, прежде чем получить от него индекс.

1

contactName явно contactName null. Перед вызовом indexOf вам потребуется некоторая нулевая проверка.

// snip
while (cursor.moveToNext())
{
    contactName  = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    if (contactName == null) continue;

    spaceIndex =  contactName.indexOf(' ');
    spaceLastIndex =  contactName.lastIndexOf(' ');
    myArr.add(contactName);
}
  • 0
    Я дам ему попробовать. Я создал контакт с просто номером телефона в моем телефоне, и он работает нормально ... И вы имели в виду, если (contactName! = Null), не так ли?
  • 0
    @erdomaster - «продолжить» означает «не выполнять строки под ним, а перезапустить цикл снова»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню