天儿真好,
我正在使用Cursor + contentResolver查询各个字段以获取Android中的联系信息。对于每个字段,我也定义了一个json对象。在下面的代码片段中,orgObj是一个JSONObject。这是我的示例代码:
String[] filter = {contactID};
Cursor genericCursor = cr.query(Data.CONTENT_URI,
null, Data.CONTACT_ID + "=?", filter, null);
while(genericCursor.moveToNext())
{
String organisation = genericCursor.getString(genericCursor.getColumnIndex(CommonDataKinds.Organization.COMPANY));
String title = genericCursor.getString(genericCursor.getColumnIndex(CommonDataKinds.Organization.TITLE));
if ((organisation != null) && (title != null))
{
orgObj.put(organisation, title);
Log.v(TAG, "org is " + organisation.toString() + " title is " + title.toString());
}
顺便说一下这很好用。但它倾向于做什么也是出于某种原因查询联系人的地址? Log.v输出如下:
02-08 20:25:12.850:V / GetContactsDataNew(2171):org是123,NY Way,NY 309210 title is 123,NY Way,NY 309210 02-08 20:25:12.850:V / GetContactsDataNew(2171):org是1249 NY way,NYC 9192 title是1249 NY way,NYC 9192 02-08 20:25:12.850:V / GetContactsDataNew(2171):org是谷歌公司的头衔是工程师
只有最后一个Log.v输出是正确的,我不能在我的生活中找出为什么它附加联系人的地址?我可以理解它附加了工作地址(即使它不应该,不在Organization.COMPANY和Organization.Title字段下),但第二个地址实际上是一个家庭地址:/
我爱我一些帮助:)
答案 0 :(得分:1)
嗯,两个小时后我终于弄清楚出了什么问题。这是每个联系人属性的mimetype(或者你有什么)。
基本上,因为我们似乎只能查询Data.CONTENT_URI,所以我们需要针对特定属性验证MIMETYPE。在我的情况下,以下剪辑修复了它:D
while (orgCursor.moveToNext())
{
String organisation = orgCursor.getString(orgCursor.getColumnIndex(CommonDataKinds.Organization.DATA1));
String title = orgCursor.getString(orgCursor.getColumnIndex(CommonDataKinds.Organization.DATA4));
String MIMETYPE = orgCursor.getString(orgCursor.getColumnIndex(CommonDataKinds.Organization.MIMETYPE));
if ((organisation != null) && (title != null)&&(MIMETYPE.equals("vnd.android.cursor.item/organization")))
{
orgObj.put(organisation, title);
Log.v(TAG, "org is " + organisation.toString() + " title is " + title.toString());
}