0

私はアンドロイド開発が初めてです。私はEclipseとJavaで開発しています。連絡先を読み取って、substring() や contains () などの文字列操作を実行しようとしています。私は次の手順を実行しました、

  1. 権限が追加されました ( )
  2. 連絡先を読み取るコード:

    Cursor people=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    while(people.moveToNext())
    {
           int id=people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
       String name= people.getString(id);
    if(name!="")
    {
        edittext1.setText(name.substring(2,3));
    }
    }
    

ここでは、部分文字列が原因でエラーが発生しています。文字列クラスのメソッドを使用するとエラーが発生します。しかし、名前にハードコードされた値を割り当てても、エラーは発生しません。すなわち。

       String name= "John";  // people.getString(id);

エラーメッセージ:

08-19 22:13:03.467: E/AndroidRuntime(4265): FATAL EXCEPTION: main
08-19 22:13:03.467: E/AndroidRuntime(4265): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1111, result=-1, data=Intent { (has extras) }} to activity {com.ravi.vrs/com.ravi.vrs.Voice}: java.lang.NullPointerException
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2553)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread.access$2000(ActivityThread.java:121)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.os.Looper.loop(Looper.java:130)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread.main(ActivityThread.java:3701)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at java.lang.reflect.Method.invokeNative(Native Method)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at java.lang.reflect.Method.invoke(Method.java:507)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at dalvik.system.NativeStart.main(Native Method)
08-19 22:13:03.467: E/AndroidRuntime(4265): Caused by: java.lang.NullPointerException
08-19 22:13:03.467: E/AndroidRuntime(4265):     at com.ravi.vrs.Voice.onActivityResult(Voice.java:71)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.Activity.dispatchActivityResult(Activity.java:3908)
08-19 22:13:03.467: E/AndroidRuntime(4265):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2549)
08-19 22:13:03.467: E/AndroidRuntime(4265):     ... 11 more

この問題を解決する方法を教えてください。

4

2 に答える 2

0

あなたが投稿したコードフラグメントonActivityResultは class のメソッドからのものであると想定していますVoice。この問題は、おそらく連絡先に が定義されていないことが原因DISPLAY_NAMEであり、その場合nameは に設定されnullます。の null 値をチェックしていませんname。次からコードを変更します。

if (name!="")

に:

if (name != null && name.length() > 0)

を呼び出すときは、例外からも保護する必要がありますgetStringのドキュメントCursor.getStringから:

結果と、列の値が null の場合、または列の型が文字列型でない場合にこのメソッドが例外をスローするかどうかは、実装によって定義されます。

于 2013-08-19T17:14:15.793 に答える
0

people.getString(1)nullだと思うので、logcatに結果を書き込むことをお勧めします。見るResultInfo{who=null, ...}

乾杯

于 2013-08-19T17:14:37.483 に答える