.indexOf()中的Android nullpointerexception

时间:2012-03-22 19:33:59

标签: android contact

我在市场上有一个应用程序,但在某些情况下它会在开放时关闭。根据崩溃错误,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运行顺畅,所以这不是问题所在。我没有选择。

3 个答案:

答案 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。