我正在尝试从ContactsContract获取电子邮件地址,但我只获得一个空字符串!姓名和号码工作正常,但不是电子邮件地址!
我很困惑,并且一直试图解决这个问题,但是我不知道什么是错的,如果我在代码中遗漏了什么,或者我不知道如何解决这个问题.
应用程序的这一部分有一个来自ContactsContract的所有名称的ListView.在ListView中选择名称时,代码应从ContactsContract获取名称,编号和电子邮件地址.
我很感激能够继续工作的一些帮助!也许还有更好的解决方法,请告诉我如何改变!谢谢!
由于toast消息没有显示在while循环中,while(cursorEmail.moveToFirst()){....我猜电子邮件光标有问题!?看起来好像空了!?
public class Activity_3 extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
listView = (ListView) findViewById(R.id.contactList);
String[] projection = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone._ID };
Cursor cursor1 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null);
// From column
String[] fromColumn = { ContactsContract.Contacts.DISPLAY_NAME };
// To view
int[] toView = { R.id.contactItem };
startManagingCursor(cursor1);
ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.activity_3, cursor1, fromColumn, toView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
String[] projection = { ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
};
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null);
cursor.moveToPosition(position);
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String contactNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String pos = Integer.toString(position);
String contactEmailAddress = "?";
//Email
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + contactId, null, null);
while(emails.moveToNext()){
contactEmailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
Toast.makeText(Activity_3.this, contactEmailAddress, Toast.LENGTH_SHORT).show();
}
emails.close();
Toast.makeText(Activity_3.this, pos + " " + contactId + " " + contactName + " " + contactNumber + " " + contactEmailAddress, Toast.LENGTH_SHORT).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
}
San*_*osh 11
您需要使用以下代码获取包含详细信息的联系人列表.以下方法将返回所有联系人的姓名,电话号码和电子邮件.
public ArrayList<ContactDO> getContacts()
{
ArrayList<ContactDO> alContacts = null;
Cursor cursor = contResv.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.moveToFirst())
{
alContacts = new ArrayList<ContactDO>();
do
{
//Create a plain class with following variables - id, name, contactNumber, email
ContactDO objContactDO = new ContactDO();
objContactDO.name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
objContactDO.id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor emails = contResv.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + objContactDO.id, null, null);
while (emails.moveToNext())
{
objContactDO.email = emails.getString(emails.getColumnIndex(Email.DATA));
break;
}
emails.close();
if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = contResv.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ objContactDO.id }, null);
while (pCur.moveToNext())
{
objContactDO.contactNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
break;
}
pCur.close();
}
alContacts.add(objContactDO);
} while (cursor.moveToNext()) ;
}
cursor.close();
return alContacts;
}
Run Code Online (Sandbox Code Playgroud)
创建自定义适配器并将其设置为listview.
lvContacts.setAdapter(adapter = new CustomContactsAdapter(getContacts()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4876 次 |
| 最近记录: |