У меня есть приложение на рынке, но в некоторых случаях оно закрывается при открытии. Согласно ошибке сбоя что-то не так с командой 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). Поэтому я добавил тех же персонажей к моему контакту, поместил пробелы перед именем, попробовал все, чтобы возиться с именем контакта, приложение работает гладко, так что это не проблема. Я из вариантов.
Вы должны проверить имя контакта, если оно не равно нулю. Я думаю, что столбец, из которого вы пытаетесь получить значение, просто пуст.
if (contactName != null) {
... и так далее
contactName = cursor.getString(cursor.getColumnIndexorThrow(ContactsContract.Contacts.DISPLAY_NAME));
Даже отображаемое имя может быть пустым для некоторых случаев... скажем, пустой контакт..
поэтому проверьте, является ли contactName нулевым или не первым, прежде чем получить от него индекс.
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);
}