2013-01-03 2 views
2

나는이 질문을 많이 연구했습니다. 실제로이 작업이 완벽하게 수행되었지만 갑자기 작동하지 않습니다.안드로이드 연락처 선택 도구 - 이름 및 번호 검색

연락처 선택 도구를 사용하여 연락처의 이름과 번호를 다시 얻으려고합니다. 나는 이름과 번호를 얻고 그것을 내 앱에서 사용하고 싶다.

는이 질문에 대한 답변에서 코드를 사용 : Selecting a number from user with multiple numbers when using the contact picker

내가 접촉 선택기를 열려고하면, 내가 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을 반환하는 이유를 모르겠습니다. 어떤 아이디어?

답변

0

결과 코드 (RESULT_CANCELED 또는 RESULT_OK : http://developer.android.com/reference/android/app/Activity.html#RESULT_CANCELED)와 반환 된 데이터를 처리하기 전에 데이터가 null인지 확인해야합니다.

당신은 또한 당신이 나의의 resultCode가 RESULT_CANCELED을 반환,에 startActivityForResult

+0

확인을 던질 때마다 확인해야합니다. 왜 또는 어떻게 고쳐야할지 잘 모르겠다. 그리고 나는 이제 stackoverflow에서 여러 개의 답변을 복사하여 붙여 넣기하여 연락처 정보를 얻었으며 모두 RESULT_CANCELED를 반환합니다. –

+1

활동을 시작하는 방법에 대한 더 많은 코드를 보여줄 수 있습니까? – ben

관련 문제