2011-10-31 46 views
0

我可能试图使用联系人选取器来获取选定联系人的电子邮件地址。Android - 有没有办法使用联系人选取器获取电子邮件地址?

但它不工作。

这里是我的代码: -

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if(resultCode == RESULT_OK) 
    { 
     Uri contactData = data.getData(); 
     Log.e(TAG, contactData.toString()); 
     String[] PROJECTION = new String[] {ContactsContract.CommonDataKinds.Email.DATA}; 
     Cursor contactInfo = managedQuery(contactData, PROJECTION, null, null, null); 
     if(contactInfo.moveToFirst()) 
     { 
      String name = contactInfo.getString(0); 
      Log.e(TAG, name); 
     } 
     else 
     { 
      Log.e(TAG, "No Data"); 
     } 
    } 
} 
} 

这里是一个堆栈跟踪: -

10-31 23:47:29.912: ERROR/AndroidRuntime(1978): FATAL EXCEPTION: main 
     java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-572D4F5547/1 flg=0x1 (has extras) }} to activity {com.varundroid.comm/com.varundroid.comm.InstantEmail}: java.lang.IllegalArgumentException: Invalid column data1 
     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 
     at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:3683) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.IllegalArgumentException: Invalid column data1 
     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:144) 
     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
     at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330) 
     at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
     at android.content.ContentResolver.query(ContentResolver.java:262) 
     at android.app.Activity.managedQuery(Activity.java:1550) 
     at com.varundroid.comm.InstantEmail.onActivityResult(InstantEmail.java:56) 
     at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
     at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 
     ... 11 more 

如果我试图再取一个名字它的工作,但如果我尝试获取电子邮件,它抛出了一个例外。

任何帮助将不胜感激。

谢谢。

回答

1

我认为你应该做的事情与活动结果的选择,而不是使用的URI。

看看这个答案:How to read contacts on Android 2.0

在第一个代码块的底部在那里它们被查询的电子邮件地址。

+0

有趣的是,这个被接受的答案在2年后被低估,没有解释为什么。 – howettl

相关问题