2017-08-09 119 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個聯繫人類似的發生與其他帳戶我也得到較少的聯繫人數與上面的代碼計數。請提出建議 –