gpt4 book ai didi

android - 无法从 ContactsContract 获取电子邮件地址

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:42 24 4
gpt4 key购买 nike

我试图从 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();
}
});
}

最佳答案

您需要使用以下代码获取包含详细信息的联系人列表。以下方法将返回所有联系人的姓名、电话号码和电子邮件。

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;
}

创建自定义适配器并将其设置为 ListView 。

lvContacts.setAdapter(adapter = new CustomContactsAdapter(getContacts()));

关于android - 无法从 ContactsContract 获取电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com