【问题标题】:Unable to read data from contact picker无法从联系人选择器中读取数据
【发布时间】:2015-04-24 12:09:02
【问题描述】:

我无法从我的活动中读取和处理联系人数据。 通过执行我的代码,它会显示一个联系人选择器,但是当我选择一个联系人时,它会显示一个对话框,“不幸的是 YourApp 已停止”。 我可以选择联系人,但无法读取电话号码、姓名等数据。

我很确定 onActivityResult() 方法有一些错误

onActivityResult()方法中的代码是:-

protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
 contact=data.getData();
 String projection[]={Phone.NUMBER};
 Cursor c=getContentResolver().query(contact, projection, null, null, null);
 c.moveToFirst();
 int column=c.getColumnIndex(Phone.NUMBER);
 String number=c.getString(column);
 Toast.makeText(this,"The number of selected contact is:-"+ number, Toast.LENGTH_LONG).show();

}
}

请帮助我。 我是android编程的新手。 提前致谢。

【问题讨论】:

  • 您在 LogCat 中获得的崩溃日志是什么?发布它。您尝试调试了吗?

标签: java android


【解决方案1】:

我认为您的 onActivityResult 应该如下所示

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            Uri result = data.getData();  
           String id = result.getLastPathSegment();
            String projection[] = { Phone.NUMBER };
            Cursor c = getContentResolver().query(Phone.CONTENT_URI, projection,
                    Phone.CONTACT_ID + "=?", new String[] { id }, null);
            c.moveToFirst();
            int column = c.getColumnIndex(Phone.NUMBER);
            String number = c.getString(column);
            Toast.makeText(this,
                    "The number of selected contact is:-" + number,
                    Toast.LENGTH_LONG).show();

        }
    }
}

【讨论】:

  • 你能告诉我为什么你把String id作为参数(倒数第二个)传递给查询方法吗?
  • @Priyank Uri 是文件所在的位置,getLastPathSegment() 给出您通过 ContactPicker 选择的联系人的 ID
  • @Priyank 请参考here了解内容提供者的查询方法
  • 你能告诉我我的代码有什么问题吗? @朵拉
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多