2014-02-16 44 views
2

我曾經使用內容解析程序先前獲取聯繫人列表及其詳細信息,但仍然有效我想嘗試在後臺查詢Content Provider的Loader方法。我已經看了看文檔和示例代碼在這裏:使用Loader的Android聯繫人電話號碼無效的列數據

http://developer.android.com/training/contacts-provider/retrieve-details.html

雖然我能夠顯示聯繫人的列表沒有任何問題,我被困在一個特定聯繫人的檢索電話號碼上點擊它,並顯示它在一個詳細的屏幕上。上面的演示顯示了用戶在詳細信息屏幕上的地址,我甚至嘗試過修改它。我已經改變了內容URI從通訊錄到ContactsContract.CommonDataKinds.Phone但我不斷收到

java.lang.IllegalArgumentException: Invalid column data1 

沒有展示它是如何做互聯網上的一個詳細的教程。這裏有人可以善待一些光線嗎?閱讀各種其他Stackoverflow問題我很確定它與2個不同的CONTENT URI有關,但我可能會錯誤。任何幫助或指針將非常感激。由於

很少有做題的我已經看了看:

Get phone number from contact loader in android: projection crash

Logcat says "invalid column data1"

How to get contacts' phone number in Android

Obtaining phone number from lookup URI

他們都沒有解決我的問題。這裏是它失敗的相關代碼:

 final static String[] PROJECTION = { 
      Contacts._ID, 
      Utils.hasHoneycomb() ? ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY : ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME 
      //ContactsContract.CommonDataKinds.Phone.NUMBER, 
    }; 

代碼工作得很好,但我刪除其評論的時刻來獲取電話號碼失敗

回答

0

這是我在實際做的摘錄我(工作)代碼。

這些都是我的相關進口:

import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Email; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.Contacts; 

由於ID是一個字符串(代表一個數字,如 「1」, 「20」,...)

// Query for phone numbers for the selected contact id 
final Cursor cur = getContentResolver().query 
    (
    Phone.CONTENT_URI, null, 
    Phone.CONTACT_ID + "=?", 
    new String[] {id}, null 
    ); 

final int phoneIdx = cur.getColumnIndex(Phone.NUMBER); 
final int phoneType = cur.getColumnIndex(Phone.TYPE); 

// ... 

    if(cur.moveToFirst()) 
    { 
     final String name = 
      cur.getString 
      (
       cur.getColumnIndexOrThrow 
       (
        ContactsContract.Contacts.DISPLAY_NAME 
       ) 
      ); 
    } 

希望它把你放在正確的道路上

4

在我的情況下,問題是與URI

我用的是這樣的:

Uri uri = ContactsContract.Contacts.CONTENT_URI; 

,我改變了這個(Phone.CONTENT_URI)來解決問題並獲得電話號碼:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 

這是其他地區代碼:

contactos = (TextView) findViewById(R.id.contactos); 

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 

String [] projection = new String[] { 
       ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER 
     }; 

Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 

while (cursor.moveToNext()){ 
      String nombre = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
      String telefono = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      contactos.append("Name: "); 
      contactos.append(nombre); 
      contactos.append(" - Phone Number: "); 
      contactos.append(telefono); 
      contactos.append("\n"); 
     } 
+0

Casariedo謝謝,這節省了我很多時間! – JPerk

相關問題