我曾与ContentProviders在以前的项目工作,这一直为我工作,但是我不能让我的头周围的问题这一次。当我使用Content Resolver运行update()时,它会复制数据库中的对象而不是更新它。的Android ContentResolver.update()产生重复
这里是代码更新。它仅在ContentValues中包含所需的更新数据,而不是整个对象的重复。 where语句中的索引变量是数据库中对象的行号,该索引是正确的。
ContentValues cv = new ContentValues();
cv.put(MessageProvider.KEY_MESSAGE_STATUS, m.getStatus());
cr.update(MessageProvider.CONTENT_URI_MESSAGE, cv, MessageProvider.KEY_ID + "=" + index, null);
我不相信这个代码是有过错,因为我试图改变这一点,但它仍然会产生相同的重复。我的选择是在Uri中加入行索引。
这是内容提供者的代码。
@Override
public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) {
int count = 0;
String whereString;
switch (uriMatcher.match(uri)) {
case MESSAGE:
count = messageDB.update(MESSAGE_TABLE, values, where, whereArgs);
break;
case MESSAGE_ID_:
String segment = uri.getPathSegments().get(1);
if (!TextUtils.isEmpty(where)) {
whereString = " AND (" + where + ')';
} else {
whereString = "";
}
count = messageDB.update(MESSAGE_TABLE, values, KEY_ID + "="
+ segment + whereString, whereArgs);
break;
default: throw new IllegalArgumentException("Unsupported URI " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
没有在我这里跳出来,因为是不正确的,但我相信更多专家的眼睛能够帮助!非常感谢!这使我心灵的顶部
你的代码似乎不错。你是否检查cr.update()返回的值是否为1,以及是否调用了一次? – SteveR 2012-08-15 14:58:51
代码中的messageDB是什么?它是一个URI吗? – 2013-11-22 18:38:28