Android nullpointerexception в .indexOf () - PullRequest
1 голос
/ 22 марта 2012

У меня есть приложение на рынке, но в некоторых случаях оно закрывается при открытии.В соответствии с ошибкой сбоя что-то не так с командой 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).Поэтому я добавил те же символы в свой контакт, поставил пробелы перед именем, попробовал все, чтобы связать с именем контакта, приложение работает без проблем, так что это не проблема.У меня нет выбора.

Ответы [ 3 ]

1 голос
/ 22 марта 2012

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);
}
1 голос
/ 22 марта 2012
contactName  = cursor.getString(cursor.getColumnIndexorThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

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

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

1 голос
/ 22 марта 2012

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

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

...