2

私はこの質問をたくさん研究しました。私は実際にこれを完全に機能させていましたが、突然機能しなくなりました。

連絡先ピッカーを使用して連絡先の名前と番号を取得しようとしています。名前と番号を取得してアプリで使用したい。

この質問への回答のコードを使用しました: 連絡先ピッカーを使用するときに、複数の番号を持つユーザーから番号を選択する

連絡先ピッカーを開こうとすると、nullPointerException が発生します。

これが私のコードです:

@Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        Uri result = data.getData(); //this is line 71

        // get the phone number id from the Uri
        String id = result.getLastPathSegment();

        // query the phone numbers for the selected phone number id
        Cursor c = getContentResolver().query(Phone.CONTENT_URI, null, Phone._ID + "=?", new String[]{id}, null);

        int phoneIdx = c.getColumnIndex(Phone.NUMBER);
        int nameIdx = c.getColumnIndex(Phone.DISPLAY_NAME);

        if(c.getCount() == 1) { // contact has a single phone number
            // get the only phone number
            if(c.moveToFirst()) {
                phoneNumber = c.getString(phoneIdx);
                contact = c.getString(nameIdx);

                //set text of view to name and number
                contactInfo.setText(contact + ": " + phoneNumber);

            } else {
                Toast.makeText(getApplicationContext(), "There are no contacts to choose from.", Toast.LENGTH_SHORT).show();
            }
        }
    }

ログキャット:

01-02 17:42:53.005: E/AndroidRuntime(3509): Uncaught handler: thread main exiting due to uncaught exception

01-02 17:42:53.025: E/AndroidRuntime(3509): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=0, data=null} to activity {com.MyActivity/com.mystuff.MyActivity}: java.lang.NullPointerException
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3329)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3371)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread.access$2700(ActivityThread.java:119)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1893)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.os.Looper.loop(Looper.java:123)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread.main(ActivityThread.java:4363)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at java.lang.reflect.Method.invoke(Method.java:521)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at dalvik.system.NativeStart.main(Native Method)
01-02 17:42:53.025: E/AndroidRuntime(3509): Caused by: java.lang.NullPointerException
01-02 17:42:53.025: E/AndroidRuntime(3509):     at com.emergencydialer.MainEmergencyDialerActivity.onActivityResult(MyActivity.java:71)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.Activity.dispatchActivityResult(Activity.java:3828)
01-02 17:42:53.025: E/AndroidRuntime(3509):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3325)

コードの 71 行目にコメントを付けました。このコードは昨日完全に機能していたので、これはイライラします。私が何をしたのかわからず、データがnullを返す理由もわかりません。何か案は?

4

1 に答える 1

0

返されたデータを処理する前に、resultCode (RESULT_CANCELED または RESULT_OK: http://developer.android.com/reference/android/app/Activity.html#RESULT_CANCELED ) を確認し、データが null であるかどうかを確認する必要があります。

startActivityForResult をスローする場所も確認する必要があります

于 2013-01-03T01:27:44.793 に答える