2017-08-09 121 views
0
private void displayAllContactsByType(String accountName) { 
     Cursor rawCursor = null; 

     try { 
      rawCursor = mCProviderClient.query(
        ContactsContract.RawContacts.CONTENT_URI, 
        null, 
        ContactsContract.RawContacts.ACCOUNT_NAME + "= ?", 
        new String[]{accountName}, 
       null); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 

     int contactIdColumn = rawCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID); 


     Utils.Log("Raw Size", " " + rawCursor.getCount()); 

     while (rawCursor.moveToNext()) { 


      String contactId = rawCursor.getString(contactIdColumn); 

      // Utils.Log("contactId ",contactId); 
      storeContactDetails(contactId); 
     } 

     if (contactList != null) { 


      contactListener = (ContactListener) context; 
      contactListener.updateView(contactList); 

     } 

    } 

我正在获取原始联系人包含的所有帐户名称。我想获得所有联系人属于特定的帐户名称,但我得到空联系人ID。我如何才能将所有联系人ID与特定的帐户名称以及该联系人ID的相应数据一起使用?在Android中的原始联系人中使用帐户名查询时获取Null联系人ID

+0

您的'contactList'初始化在哪里? – Eselfar

+0

它已正确初始化。我的意思是全球性的,我得到这里null null String contactId = rawCursor.getString(contactIdColumn); –

+0

我很少使用游标,所以我可能是错的,但这不是因为你接下来移动而没有检查接下来有什么东西吗?尝试'while(rawCursor.isAfterLast()== false)'而不是'while(rawCursor.moveToNext())'建议[here](http://www.higherpass.com/android/tutorials/accessing-data- with-android-cursors/2 /) – Eselfar

回答

2

首先,RawContacts.CONTACT_IDLong类型,而不是String的,所以你应该做的:

Long contactId = rawCursor.getLong(contactIdColumn); 

参见:https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html#CONTACT_ID不注重CONTACT_ID场它总是字符串类型,看看Type: INTEGER在它下面。

第二,这是罕见的,但是当一个RawContact不属于任何Contact可能发生,我呼吁那些僵尸RawContacts,它们可以通过一个损坏的数据库或错误,或有意创建RawContact在使用AGGREGATION_MODE创建任,请参阅AGGREGATION_MODE_DISABLED

+0

我同意你的第二点,但如何避免僵尸RawContacts。 –

+0

你无法避免它们,以我的经验僵尸存在于大约20%的设备上,主要是因为SyncAdapters中的错误(不在你的控制范围内)。你可以简单地跳过你的代码中没有有效的CONTACT_ID的RawContacts,因为它们对用户来说是不可见的 – marmor

+0

count = rawCursor.getCount()给出了正确的计数,比如说我已经选择了Sim 1作为帐户名称,我得到的数量为7,但我只在我的列表中获得6个联系人类似的发生与其他帐户我也得到较少的联系人数与上面的代码计数。请提出建议 –