私は以前のプロジェクトでContentProvidersを使用してきましたが、これは常に機能していましたが、今回は問題を回避できません。コンテンツリゾルバーを使用して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;
}
間違っているとしてここで私に飛び出すものは何もありませんが、より専門家の目が助けることができると確信しています!どうもありがとう!