2010-03-18 26 views
3

我寫了一個應用程序,並添加了2個聯繫人在模擬器上,但我 無法更新他們的名字在Android 2.1上,代碼正在處理 Android 1.6平臺用下面的代碼。我怎樣才能得到適當的Uri在Android 2.1的特定聯繫人

ContentValues contactValues = new ContentValues(); 
contactValues.put(Contacts.People.NAME, firstName+" "+lastName); 
getContentResolver().update(UpdateContactUri, contactValues, null, 
null); 

在Android 1.6的我得到的URI的兩個觸點 「內容:// 聯繫人/人/ 1」 和 「內容://聯繫人/人/ 2」。

但在2.1我得到這些值是「內容://聯繫人/人/ 8」 和「內容://聯繫人/人/ 9」,並同時更新其給予 「java.IllegalArgumentException,空值「例外。

當我試圖把一個靜態Uri像「內容:// contacts/people/1」, 代碼調試成功,但沒有更新聯繫人。

我該如何解決它,爲什麼我沒有得到像ui 1.6這樣的uri平臺?

在此先感謝...

回答

0

2.1 SDK中包含名爲ContactsContract 接觸新contentHandler時查詢現在窺測不同,所以我敢肯定,URI也不同。 我們在2.1版本中只能編輯和獲取聯繫人的字段。 看到http://developer.android.com/reference/android/provider/ContactsContract.html

+0

喜的Eyal感謝您的答覆,現在我能得到不同的URI喜歡的內容://com.android。 contacts/contacts/16,但無法通過contactValues.putContactsContract.Contacts.DISPLAY_NAME,firstName +「」+ lastName)更新名稱; getContentResolver().update(content://com.android.contacts/contacts/16,contactValues,null,null); 我得到0作爲更新的行數。這裏有什麼不對嗎? – Rishabh

0

您可以使用下面的代碼在模擬器添加聯繫人。 import android.provider.Contacts.People;

public void addvaluestocontent() 
{ 
    ContentValues values = new ContentValues(); 
    values.put(People.NAME, "Abraham Lincoln"); 
    values.put(People._ID, "1"); 
    values.put(People.NUMBER, "23333"); 
    Uri uri = getContentResolver().insert(People.CONTENT_URI, values); 
} 
4

在Android 2.1的,我用這個黑客的代碼來更新聯繫人姓名:

public static void modifyPeopleName(ContentResolver cr, String id, 
     String sName) { 
    if (sName == null) 
     return; 

    ContentValues values = new ContentValues(); 
    int android_sdk_version = Integer.parseInt(Build.VERSION.SDK); 
    if (android_sdk_version < 7) { 
     values.put(People.NAME, sName); 
     cr.update(People.CONTENT_URI, values, People._ID+"="+id, null); 
    } else { 
     values.put("data1", sName); 
     cr.update(Uri.parse("content://com.android.contacts/data/"), 
       values, "raw_contact_id=" + id, null); 
    } 
    return; 
}