【发布时间】:2017-01-11 20:27:21
【问题描述】:
我正在开发一个包含处理联系人的应用程序。我尝试了不同的方法,但它们都没有奏效。我正在其中一个选项卡式活动片段中获取联系方式。它可以正确获取除联系人的电子邮件地址之外的所有其他详细信息。我已经找到了原因,因为 ContactsContract.CommonDataKinds.Phone._ID 获取的 ID 与 ContactsContract.CommonDataKinds.Email.CONTACT_ID 不同。现在我应该编写什么代码来从手机中获取所有联系人以及 name、number、email、photo_uri。请帮忙!这是我的一段代码:
public class FragmentContacts extends Fragment{
ListView contacts;
ArrayList<String> namelist=new ArrayList<String>();
ArrayList<String> number=new ArrayList<String>();
ArrayList<String> contact_id=new ArrayList<String>();
ArrayList<String> contact_image_uri=new ArrayList<String>();
ArrayList<String> contact_email=new ArrayList<String>();
String[] sortImage;
ImageButton addContact;
String email;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_contacts, container, false);
contacts=(ListView)rootView.findViewById(R.id.contact_list);
addContact=(ImageButton)rootView.findViewById(R.id.add_contact);
namelist.clear();
getContacts();
addContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNewContact();
}
});
return rootView;
}
public void getContacts() {
ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
Cursor managedCursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.PHOTO_URI}, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
while (managedCursor.moveToNext()) {
String id = managedCursor.getString(0);
String name = managedCursor.getString(1);
String phoneNumber = managedCursor.getString(2);
String image_uri=managedCursor.getString(3);
//email=managedCursor.getString(4);
email=getEmail(id);
System.out.println("Email is "+email);
contact_id.add(id);
// System.out.println("Id is "+id+" "+"Name is "+name);
namelist.add(name);
number.add(phoneNumber);
contact_image_uri.add(image_uri);
contact_email.add(email);
}
managedCursor.close();
ContactAdapter a = new ContactAdapter(getActivity(), contact_id, namelist, number,contact_image_uri,contact_email);
contacts.setAdapter(a);
}
public void addNewContact()
{
Intent in= new Intent(getContext(),AddContact.class);
startActivity(in);
}
private String getEmail(String contactId) {
String mailE=null;
ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
Cursor cursor = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID +" = ?",
new String[]{contactId}, null);
while (cursor.moveToNext())
{
mailE=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
System.out.println("In Between Email is "+mailE);
}
cursor.close();
return mailE;
}
}
【问题讨论】:
-
你试过这个 SO 链接stackoverflow.com/questions/10117049/…
-
尝试游标对象如上回答链接