魅族M9修改SIM电话本报错
我写了一段代码,查找某个号码的sim卡电话本,查找到则执行更新,如果没有找到则新建一个。这段代码在很多手机上都验证通过了,只是在魅族M9的机器会报错。其中query命令没问题,但是update和insert都会抛出异常,应用崩溃。
01-01 08:01:21.976: E/AndroidRuntime(613): java.lang.UnsupportedOperationException: Cannot insert into URL: content://icc/adnbecause of no index
01-01 08:01:21.976: E/AndroidRuntime(613): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:146)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.content.ContentProviderProxy.update(ContentProviderNative.java:495)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.content.ContentResolver.update(ContentResolver.java:724)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.nationz.simtest03.CardOp.writeRecord(CardOp.java:91)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.nationz.simtest03.SimTest03Activity$1.onClick(SimTest03Activity.java:37)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.view.View.performClick(View.java:2626)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.view.View$PerformClick.run(View.java:9361)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Handler.handleCallback(Handler.java:587)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Looper.loop(Looper.java:130)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.app.ActivityThread.main(ActivityThread.java:3768)
01-01 08:01:21.976: E/AndroidRuntime(613): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 08:01:21.976: E/AndroidRuntime(613): at java.lang.reflect.Method.invoke(Method.java:507)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-01 08:01:21.976: E/AndroidRuntime(613): at dalvik.system.NativeStart.main(Native Method)
实现代码如下:
ContentValues values = new ContentValues();
Uri u = null;
int updateRows = 0;
Cursor cursor = getContentResolver().query(contactUri, null, null, null, null);
if(cursor.moveToFirst() == true) {//sim通讯录不为空
//查找是否有该号码的通讯录
boolean found = false;
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String number = cursor.getString(cursor.getColumnIndex("number"));
if(number.equalsIgnoreCase(ADDRESS)) {
//找到该号码的通讯录,则更新本条记录
found = true;
values.put("tag", name);
values.put("number", number);
values.put("newTag", ss);
values.put("newNumber", ADDRESS);
StringBuffer selection = new StringBuffer();
selection.append("tag='").append(name).append("'");
selection.append(" AND ");
selection.append("number='").append(number).append("'");
updateRows = getContentResolver().update(contactUri, values, selection.toString(), null);
}
}while (cursor.moveToNext());
if(!found) {//没找到则创建新的通讯录
values.put("tag", ss);
values.put("number", ADDRESS);
u = parentActivity.getContentResolver().insert(contactUri, values);
}
}else {//如果sim通讯录为空,则创建新的通讯录
values.put("tag", ss);
values.put("number", ADDRESS);
u = parentActivity.getContentResolver().insert(contactUri, values);
}