我在市场上有一个应用程序,但在某些情况下它会在开放时关闭。根据崩溃错误,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)。所以我在我的联系人中添加了相同的字符,在名称前添加了空格,尝试了一切乱七八糟的联系人姓名,app运行顺畅,所以这不是问题所在。我没有选择。
答案 0 :(得分:1)
如果contactName不为null,则应检查该名称。我认为你想从中获取价值的专栏只是空的。
if (contactName != null) {
...等等
答案 1 :(得分:1)
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);
}
答案 2 :(得分:1)
contactName = cursor.getString(cursor.getColumnIndexorThrow(ContactsContract.Contacts.DISPLAY_NAME));
在某些情况下,即使显示名称也可以为空...说空白联系..
所以在从中获取索引之前先检查contactName是否为null。