2012-03-22 2 views
1

私は市場にアプリを持っていますが、オープンで強制終了する場合もあります。クラッシュエラーによると、indexOfコマンド(NullPointerException)に問題があります。コードの一部:.indexOf()でのAndroidのヌルポイントの受信

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)に特殊文字との接触が2つあります。だから私は私の連絡先に同じ文字を追加し、名前の前に空白を入れて、連絡先の名前をつぶすためにすべてを試して、アプリが円滑に実行されるので、これは問題ではありません。私はオプションから外れています。

答えて

1

nullでない場合、contactNameをチェックする必要があります。私は、値を取得しようとしている列が空であると思います。

if (contactName != null) { ...とそう

+0

if(contactName!= "")も良いですか? – erdomester

+0

私はこれを最初の回答として受け入れる – erdomester

+0

if(contactName!= "")no!これは動作しません! nullと空の文字列は2つの異なるものです – Kousalik

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); 
} 
+0

私はそれを試してみましょう。私は私の電話の電話番号だけで連絡先を作成し、それは正常に動作します... あなたは(contactName!= null)、あなたは意味ですか? – erdomester

+0

@erdomaster - 'continue'は 'その下の行を実行しないで、ループを再開します'という意味です。 ' – NickT

+0

ありがとう、私はこのコマンドを知らなかった。 – erdomester

1
contactName = cursor.getString(cursor.getColumnIndexorThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

でも表示名は、いくつかのケースのためにnullになることができます...空白の接触を言う..

のでCONTACTNAMEはそれからインデックスを取得する前に最初のnullであるかどうかを確認してください。

関連する問題