2012-10-01 122 views
0

我想拿起从联系人列表 我写这样的代码来接电话号码,电话号码,但这个抛出异常想从联系人列表“机器人”

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      switch (requestCode) { 
      case CONTACT_PICKER_RESULT: 
       Bundle extras = data.getExtras(); 
       Set<String> keys = extras.keySet(); 
       Iterator<String> iterate = keys.iterator(); 
       while (iterate.hasNext()) { 
        String key = iterate.next(); 
        Log.v("R", key + "[" + extras.get(key) + "]"); 
       } 
       Uri result = data.getData(); 
       Cursor c = getContentResolver().query(result,null,null,null,null); 
       try { 
        c.moveToFirst(); 
        String name = c 
          .getString(c 
            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        Log.i("name", name); 
        String contactId = c.getString(c 
          .getColumnIndex(ContactsContract.Contacts._ID)); 
        Log.i("Contact Id : ", contactId); 
        Cursor phones = getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = " + contactId, null, null); 
        final String[] contactNumbers = new String[phones 
          .getCount()]; 
        int count = 0; 
        while (phones.moveToNext()) { 
         contactNumbers[count] = phones 
           .getString(phones 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         count++; 
        } 
        phones.close(); 

        if (contactNumbers.length > 1) { 
         AlertDialog.Builder builder = new AlertDialog.Builder(this); 
         builder.setTitle("Call Number"); 
         builder.setItems(contactNumbers, new OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           ContactActivity.roamNumber 
             .setText(contactNumbers[which]); 

          } 
         }); 

         builder.create().show(); 

        } else { 
         ContactActivity.roamNumber 
         .setText(contactNumbers[0]); 
        } 

       } finally { 
        c.close(); 
       } 

       break; 
      } 

     } else { 
      // gracefully handle failure 
      Log.i("", "Warning: activity result not ok"); 
     } 


    } 

音符拿起电话:我的手机同步与Facebook当选择了任何Facebook联系人给我的号码抛出异常:

10-01 13:44:17.369: E/AndroidRuntime(9991): FATAL EXCEPTION: main 
10-01 13:44:17.369: E/AndroidRuntime(9991): java.lang.RuntimeException: Failure delivering result ResultInfo{who=Contact, request=1001, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/543r3759-2D333B2D45513B2D373D41.1160i730738002/3838 flg=0x1 (has extras) }} to activity {com.xeno.callRoaming/com.xeno.callRoaming.XenoCallRoamingActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.os.Looper.loop(Looper.java:123) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at java.lang.reflect.Method.invoke(Method.java:507) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at dalvik.system.NativeStart.main(Native Method) 
10-01 13:44:17.369: E/AndroidRuntime(9991): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.database.CursorWrapper.getString(CursorWrapper.java:135) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at com.xeno.callRoaming.ContactPickerActivity.onActivityResult(ContactPickerActivity.java:67) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:119) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
10-01 13:44:17.369: E/AndroidRuntime(9991):  ... 11 more 

是什么问题?

+0

检查这个http://stackoverflow.com/questions/7311595/failure-delivering-result-resultinfowho-null-request-0-result-1- data-null –

+0

@Ramkiran我的例子挑选联系人和问题时,挑选Facebook联系人 – abdelhady

+0

错误是一样的权利,所以我认为它可以帮助你。这就是它 –

回答

0

我解决问题使用此代码:

Uri result = data.getData(); 

       Cursor c = getContentResolver().query(result, null, null, null, 
         null); 
       Log.d("Row Count c", c.getCount() +""); 
       Log.d("result", result +""); 

       try { 
        c.moveToFirst(); 
        String name = c 
          .getString(c 
            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        Log.i("name", name); 

        String contactId = c.getString(c 
          .getColumnIndex(ContactsContract.Contacts._ID)); 
        Log.i("Contact Id : ", contactId); 
        Cursor phoness = getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = " + contactId, null, null); 
        Cursor phones = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
          ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + 
          " like ('"+name+"')", null, null); 


        if (phones.getCount() == 0) { 
         AlertDialog.Builder numbersBuilder = new AlertDialog.Builder(this); 
         numbersBuilder.setMessage("No Number Found ..!") 
         .setCancelable(true); 
         AlertDialog alert = numbersBuilder.create(); 
         alert.show(); 
         ContactActivity.roamNumber 
         .setText(""); 
         break; 
        } 

        final String[] contactNumbers = new String[phones 
          .getCount()]; 
        int count = 0; 
        while (phones.moveToNext()) { 
         contactNumbers[count] = phones 
           .getString(phones 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         count++; 
        } 
        phones.close(); 

        if (contactNumbers.length > 1) { 
         AlertDialog.Builder builder = new AlertDialog.Builder(this); 
         builder.setTitle("Call Number"); 
         builder.setItems(contactNumbers, new OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           ContactActivity.roamNumber 
             .setText(contactNumbers[which]); 

          } 
         }); 

         builder.create().show(); 

        } else { 
         ContactActivity.roamNumber 
         .setText(contactNumbers[0]); 
        } 


       } finally { 
        c.close();   
         }