android 读取手机通讯录的电话号码错误,大牛们给解决一下

骑猪去东莞 2010-11-24 12:24:24
public ArrayList<HashMap<String, String>> getDate() {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


String name;
String phoneNum;
Cursor cursor = getContentResolver().query(People.CONTENT_URI,
null, null, null, null);
int nameColumn = cursor.getColumnIndex(People.NAME);
int phoneColumn = cursor.getColumnIndex(People.NUMBER);

for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
name = cursor.getString(nameColumn);
[color=#FF0000]phoneNum = cursor.getString(phoneColumn); [/color]
HashMap<String, String> map = new HashMap<String, String>();
map.put("name",name);
map.put("num", phoneNum);
mylist.add(map);
}

return mylist;
}[code]以上为代码,红色字体段为null,得不到号码,可是我的通讯录上明明有号码啊.为什么得不到呢,报空指针异常

一下为异常[code=Java]11-24 04:03:09.474: ERROR/AndroidRuntime(563): FATAL EXCEPTION: main
11-24 04:03:09.474: ERROR/AndroidRuntime(563): java.lang.NullPointerException
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.sirius.android.MyListViewActivity$2.onItemSelected(MyListViewActivity.java:76)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.widget.AdapterView.access$200(AdapterView.java:42)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.os.Handler.handleCallback(Handler.java:587)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.os.Handler.dispatchMessage(Handler.java:92)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.os.Looper.loop(Looper.java:123)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at java.lang.reflect.Method.invokeNative(Native Method)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at java.lang.reflect.Method.invoke(Method.java:521)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at dalvik.system.NativeStart.main(Native Method)
...全文
1468 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShowTang 2010-11-24
  • 打赏
  • 举报
回复
建议把这部分代码贴出来:
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.sirius.android.MyListViewActivity$2.onItemSelected(MyListViewActivity.java:76)
zqfddqr 2010-11-24
  • 打赏
  • 举报
回复
zqfddqr 2010-11-24
  • 打赏
  • 举报
回复
不懂帮顶 建议你发到android版
骑猪去东莞 2010-11-24
  • 打赏
  • 举报
回复
问题已经解决了,谢谢各位回帖,愿意是版本问题,2.0以后读取方式变了.
纠结的木棉花 2010-11-24
  • 打赏
  • 举报
回复
另外,Android2.0对联系人API进行了增强, 下面一段代码则是,读取联系人的详细信息,包括email等,




1. Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
2. while (cursor.moveToNext())
3. {
4. String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
5. String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
6. if (Boolean.parseBoolean(hasPhone))
7. {
8. Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
9. while (phones.moveToNext())
10. {
11. String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
12. }
13. phones.close();
14. }
15. Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);
16. while (emails.moveToNext())
17. {
18. String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.CommonDataColumns.DATA));
19. }
20. emails.close();
21. }
22. cursor.close();

参考一下吧
aSysBang 2010-11-24
  • 打赏
  • 举报
回复
2.x 版本 读取方式和之前不一样的
纠结的木棉花 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhq56030207 的回复:]

个人觉得是不是for循环的问题 还有你的phoneColumn可以取到值吗?
前两天刚解决了一个空指针的问题..
[/Quote]另外你读取联系人的uri路径对吗?
ShowTang 2010-11-24
  • 打赏
  • 举报
回复
你输出一下联系人号码,看是不是为null。
Android SDK 1.6以后的联系人取值方式有点不一样,看是不是

int nameColumn = cursor.getColumnIndex(People.NAME);
int phoneColumn = cursor.getColumnIndex(People.NUMBER);

过时了
纠结的木棉花 2010-11-24
  • 打赏
  • 举报
回复
个人觉得是不是for循环的问题 还有你的phoneColumn可以取到值吗?
前两天刚解决了一个空指针的问题..
骑猪去东莞 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiewenping 的回复:]

引用 3 楼 showtang 的回复:

建议把这部分代码贴出来:
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.sirius.android.MyListViewActivity$2.onItemSelected(MyListViewActivity.java:76)
[/Quote]
这里取值的时候报null
骑猪去东莞 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 showtang 的回复:]

建议把这部分代码贴出来:
11-24 04:03:09.474: ERROR/AndroidRuntime(563): at com.sirius.android.MyListViewActivity$2.onItemSelected(MyListViewActivity.java:76)
[/Quote]

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧