查询联系人的组织,但获取地址类型和值

Posted

技术标签:

【中文标题】查询联系人的组织,但获取地址类型和值【英文标题】:Querying a contact's organization, but getting address Type and values 【发布时间】:2014-03-06 10:02:50 【问题描述】:

生日,

我正在使用 Cursor + contentResolver 来查询各个字段以获取 android 中的联系信息。对于每个字段,我也定义了一个 json 对象。在 orgObj 下面的 sn-p 中是一个 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 is 123, NY Way, NY 309210 title is 123, NY Way, NY 309210 02-08 20:25:12.850: V/GetContactsDataNew(2171): org 是 1249 NY 方式,NYC 9192 标题是 1249 NY 方式,NYC 9192 02-08 20:25:12.850: V/GetContactsDataNew(2171): org 是 Google Inc 头​​衔是 Engineer

只有最后一个 Log.v 输出是正确的,我无法弄清楚为什么它会附加联系人的地址?我可以理解它附加了工作地址(即使它不应该,不在 Organization.COMPANY 和 Organization.Title 字段下),但第二个地址实际上是家庭地址:/

我很想给我一些帮助:)

【问题讨论】:

【参考方案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());
               

【讨论】:

以上是关于查询联系人的组织,但获取地址类型和值的主要内容,如果未能解决你的问题,请参考以下文章

Android:通过 IM 获取所有联系人

如何获取/查询联系人的 Facebook 名称?

获取联系人

Flutter:如何从联系人获取用户地址

获取具有类型过滤功能的 Android 联系人,仅限于特定帐户

如何获取所有 android 联系人但没有 SIM 卡上的联系人