【问题标题】:Android - Get Nickname and Type of NicknameAndroid - 获取昵称和昵称类型
【发布时间】:2011-06-29 11:41:00
【问题描述】:

我已经尝试获取联系人的昵称几个小时了,但仍然无法让他们工作,我被告知他们与电话号码等在不同的表中。但我不知道如何访问它们。

我得到的最接近的是这个..

Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID +" = ?", new String[]{String.valueOf(recordId)}, null);
    while (cursor.moveToNext()) {
       Cursor nickname = context.getContentResolver().query( ContactsContract.Data.CONTENT_URI, null, ContactsContract.CommonDataKinds.Nickname.CONTACT_ID +" = "+ recordId, null, null); 
       while (nickname.moveToNext()) { 
           try {
           String nicknameName = nickname.getString(nickname.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.NAME));
           String nicknameType = nickname.getString(nickname.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.TYPE));

           switch (Integer.valueOf(nicknameType)) {
           case 1: nicknameType = "TYPE_HOME"; break;
           }
           list.add(new KeyValue("Nickname:" + nicknameType, nicknameName));
           } catch (Exception e) { continue; }
       }
       nickname.close();
    }

这会获取联系人的所有数据以及类型,例如:Thomas Owers 1 这很好,但它没有告诉我数据是什么,所以它给出了电子邮件、电话、姓名、昵称但我无法区分它们。

任何帮助将不胜感激,谢谢! :)

【问题讨论】:

    标签: java android


    【解决方案1】:

    我在网上搜索了几个小时后才得到这个昵称......

    ArrayList<KeyValue> list = new ArrayList<KeyValue>();
    
        Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID +" = ?", new String[]{String.valueOf(recordId)}, null);
        while (cursor.moveToNext()) {
           String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
           String[] params = new String[] {String.valueOf(recordId), ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE};
           Cursor nickname = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, params, null); 
           while (nickname.moveToNext()) { 
                String nicknameName = nickname.getString(nickname.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.NAME));
                String nicknameType = nickname.getString(nickname.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.TYPE));
                switch (Integer.valueOf(nicknameType)) {
                case 1: nicknameType = "Default"; break;
                case 2: nicknameType = "OtherName"; break;
                case 3: nicknameType = "MaidenName"; break;
                case 4: nicknameType = "ShortName"; break;
                case 5: nicknameType = "Initials"; break;
                }
                list.add(new KeyValue("Nickname:" + nicknameType, nicknameName));
           }
           nickname.close();
        }
        return list;
    

    此代码获得昵称! :)

    【讨论】:

      【解决方案2】:

      不要获取所有数据。仅使用投影获取所需的数据

      String[] proj ={ContactsContract.CommonDataKinds.Nickname.NAME, ContactsContract.CommonDataKinds.Nickname.TYPE};
      
      Cursor nickname = getContentResolver().query( ContactsContract.Data.CONTENT_URI, proj,ContactsContract.CommonDataKinds.Nickname.CONTACT_ID +" = "+ recordId, null, null); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 2013-10-15
        • 2021-07-30
        • 2021-04-05
        • 2021-07-28
        • 2021-11-17
        相关资源
        最近更新 更多