Android联系人选取器-检索姓名和号码
我对这个问题做了很多研究。事实上我让它工作得很好,但现在突然不起作用了 我正在尝试使用联系人选择器检索联系人的姓名和号码。我想获得姓名和号码,并在我的应用程序中使用它 我使用了这个问题答案中的代码: 当我试图打开联系人选择器时,我得到一个nullPointerException 这是我的密码:Android联系人选取器-检索姓名和号码,android,nullpointerexception,contact,picker,Android,Nullpointerexception,Contact,Picker,我对这个问题做了很多研究。事实上我让它工作得很好,但现在突然不起作用了 我正在尝试使用联系人选择器检索联系人的姓名和号码。我想获得姓名和号码,并在我的应用程序中使用它 我使用了这个问题答案中的代码: 当我试图打开联系人选择器时,我得到一个nullPointerException 这是我的密码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@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。有什么想法吗?在处理返回的数据之前,您应该检查您的结果代码(RESULT\u cancelled或RESULT\u OK:)以及数据是否为空
您还应该检查抛出startActivityForResult的位置Ok,这样我的resultCode将返回已取消的结果。但不知道为什么或如何修复它。现在我已经复制并粘贴了stackoverflow关于获取联系信息的多个答案,所有答案都返回了结果。