我已经编写了一个应用程序并在模拟器上添加了2个联系人,但是我 我无法在Android 2.1上更新他们的名字,代码正在进行中 android 1.6平台,代码如下。
ContentValues contactValues = new ContentValues();
contactValues.put(Contacts.People.NAME, firstName+" "+lastName);
getContentResolver().update(UpdateContactUri, contactValues, null,
null);
在android 1.6中我得到Uri这两个联系人是“content:// 联系人/人/ 1“和”content:// contacts / people / 2“。
但在2.1中我得到的这些值是“content:// contacts / people / 8” 和“content:// contacts / people / 9”并在更新其捐赠时 “java.IllegalArgumentException,Empty values”exception。
当我尝试将静态Uri设为“content:// contacts / people / 1”时, 代码已成功调试,但联系人未更新。
我如何解决它,为什么我不喜欢像1.6平台那样的uri?
提前致谢...
答案 0 :(得分: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;
}
答案 1 :(得分:0)
2.1 SDK包含名为ContactsContract的联系人的新contentHandler 查询现在移动到看起来不同,所以我确定URI也是不同的。 我们在2.1中工作只能编辑和获取联系人的字段。 见http://developer.android.com/reference/android/provider/ContactsContract.html
答案 2 :(得分: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);
}