我是android新手。所以我请你耐心等待我。我正在尝试编写一个应用程序,按下按钮即可打开联系人API。然后用户选择联系人。然后我想在onAcitvityResult(int reqcode, int rescode, Intent data)
中获取所选择的联系人。有没有办法在没有获取Uri并通过整个数据库查询它的情况下执行此操作?
这是第二个活动开始的代码:
public void onClick(View v) {
Log.d(TAG, "contact button clicked");
Toast.makeText(ctx, "Contact button clicked",
Toast.LENGTH_SHORT).show();
Intent contacts = new Intent(Intent.ACTION_GET_CONTENT,Contacts.CONTENT_URI);
contacts.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivityForResult(contacts,1);
}
我使用Contacts.CONTENT_URI
和Intent.ACTION_GET_CONTENT
是否正确?
我使用的意图是否正确? 我觉得我应该在这里包含电子邮件细节。
这是我处理活动结果的地方:
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
String email=""; long id;
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
// get the contact ID
Uri contacturi= data.getData();
Cursor c= getContentResolver().query(contacturi,null,null,null,null);
id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID));
c.close();
// get the data package containing the email address for the contact
c=getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[]{Email.DATA1},
ContactsContract.Data.CONTACT_ID + "=? AND " + Email.MIMETYPE + "=?",
new String[]{String.valueOf(id), Email.CONTENT_ITEM_TYPE}, null);
email=c.getString(c.getColumnIndex(Email.DATA1));
Log.d(TAG, "email is" + email);
}
}
else {
Log.d(TAG, "requestCode is not 1");
}
EditText ctext= (EditText) findViewById(R.id.contacttxt);
ctext.append(email);
Log.d(TAG, "onActivityResult() ends");
}
我收到运行时异常,说failure delivering result
我应该包含一些setResult()
方法吗?
提前谢谢。
答案 0 :(得分:0)
我明白了:) 你必须添加c.moveToFirst();两次初始化后作为2个游标。 但我不明白为什么。谁能解释一下呢?