- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图从 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/
在how to retrieve the list of contacts in android我看到代码允许您使用 ContactsContract.CommonDataKinds.Phone.CO
我可以使用下面的查询选择所有联系人 cr = mActivity.getContentResolver(); String selection = ContactsContract.C
我试图将隐式意图发送给我的联系人应用程序,以供用户选择联系人。然后,我的应用程序将提取该联系人的姓名和电话号码,以便在该应用程序中使用。 (注意:我在BigNerdRanch的Android书籍的第2
任何人都可以帮助我在地址簿中添加新联系人并使用新的 ContactsContract API 批量应用它们吗?我找不到合适的教程。 我可以添加一个联系人。但是批量更新失败,添加了未知联系人。 目前我在
我想把我手机里的所有联系人放到一个数组中。我正在使用下面的代码,但将它们全部放入数组需要 3-4 秒。为了加快这个过程,我只收集那些有电话号码的联系人。这会产生一个包含 163 个元素的数组。 fin
我正在通过查询联系人 private Cursor cursor; private static final String SORT_ORDER = ContactsContract.Contacts
ContactsContract.Contacts 默认是空的吗?如果是这样,我如何向其中添加一些测试数据? 否则,我一定是做错了什么/遗漏了什么,因为这个 Activity 显示完全是空的。 pub
很抱歉,如果这可能是一个重复的问题,我整个晚上都在努力解决这个问题,而且我似乎找不到其他可能对此有所启发的帖子,所以我希望多几双眼睛可能会发现一些东西。 我对 ContactsContract.Dat
在我的应用程序中,我想调用联系人编辑器以允许用户添加新联系人。我想找到一种方法让应用程序将要使用的帐户传递给编辑器。如何做到这一点? 我还没有找到任何关于如何执行此操作的文档。我确实在 github
我想获取本地联系人的电话号码,但是有问题。例如,如果我选择 A,那么显示的号码是 B 的。这是代码。 //the button_click public void testM(View v) {
我尝试使用获取联系人 ID 和图片 URI 的函数更新 ContactsContract 中的照片,但它似乎不起作用(我的函数返回 true)。 我真的不明白,因为代码看起来不错。 当联系人已经有照片
是否可以对 ContactsContract 进行一次查询以获取一组与显示名称、电话号码或电子邮件地址匹配的联系人? 这本质上是联系人和数据“表”的连接(在引号中,因为它们只是通过界面看起来像表,但可
是否有一个有效的查询来查找特定帐户名称和类型的所有聚合联系人? ContactsContract.Contacts 表有 IN_VISIBLE_GROUP 列,它对联系人组成员身份有效。因此,如果用户
除了 android 站点上的简短文章:- http://developer.android.com/resources/articles/contacts.html 我还没有看到任何关于使用新的 C
我们如何使用隐式连接通过 ContactsContract API 获取 displayname 和 organization.data,以便我可以在一个游标中同时获取这两个值? 最佳答案 您可以使用
我正在使用 ContactsContract 通过将用户发送到“新联系人” Intent 来插入新联系人。我使用的代码是: Intent i = new Intent(Intent.ACTION_IN
我可以使用 ContactsContract 添加联系人到用户的一个帐户(这本身就是一项艰巨的任务!),但我仍然无法将其添加到将显示的组中。我知道用户可以转到他们的联系人选项并选中他们帐户中的“显示所
我试图从 ContactsContract 获取电子邮件地址,但我只得到一个空字符串!姓名和电话号码可以正常使用,但电子邮件地址不行! 我很困惑,几天来一直在尝试解决这个问题,但我不知道出了什么问题,
我正在尝试在 ContactsContract 中创建一个用户配置文件...因为没有,我需要一个用于测试。我没有真实的 Android 设备,只有用于测试的 AVD 模拟器。 这是我正在使用的代码块:
我需要创建一个包含在设备上找到的所有电话号码的列表。所以我所做的是查询 ContactsContract.Data.CONTENT_URI,如下所示: Uri uri = Da
我是一名优秀的程序员,十分优秀!