arbeitet an einem Content-Provider und ich habe ein Problem damit. Wenn ich versuche, eine bestimmte Zeile in der SQLite-Datenbank über den Inhaltsanbieter zu aktualisieren, wird die Spalte in allen Zeilen aktualisiert, nicht nur in der von mir angegebenen Zeile. Ich weiß, dass der CP funktioniert, weil ich darauf zugreifen kann, füllen Sie eine Listview mit ihm und ändern Sie den Inhalt der Spalte, aber nie nur eine Spalte.Content Provider aktualisiert alle Zeilen
Hier ist die relevante Update-Methode
public int update(Uri url, ContentValues values, String where,
String[] whereArgs) {
SQLiteDatabase mDB = dbHelper.getWritableDatabase();
int count;
String segment = "";
switch (URL_MATCHER.match(url)) {
case ITEM:
count = mDB.update(TABLE_NAME, values, where, whereArgs);
break;
case ITEM__ID:
segment = url.getPathSegments().get(1);
count = mDB.update(TABLE_NAME, values,
"_id="
+ segment
+ (!TextUtils.isEmpty(where) ? " AND (" + where
+ ')' : ""), whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URL " + url);
}
getContext().getContentResolver().notifyChange(url, null);
return count;
}
und hier ist der Code, den ich verwende (versuchen) zu aktualisieren.
ContentValues mUpdateValues = new ContentValues();
mUpdateValues.put(ContentProvider.HAS, "true");
mUpdateValues.put(ContentProvider.WANT, "false");
mRowsUpdated = getContentResolver().update(Uri.parse(ContentProvider._ID_FIELD_CONTENT_URI
+ rowId), mUpdateValues, null, null);
und hier die URI ist
URL_MATCHER.addURI(AUTHORITY, TABLE_NAME + "/#", ITEM__ID);
Danke, jede mögliche Hilfe würde geschätzt.
EDIT Ich habe auch versucht,
mRowsUpdated = getContentResolver().update(
ContentProvider._ID_FIELD_CONTENT_URI, mUpdateValues,
null, null);
und
mRowsUpdated = getContentResolver().update(
ContentProvider.CONTENT_URI, mUpdateValues,
null, null);
Ich habe versucht 'rowId' verwendet, die eine Saite auf der _id des Datensatzes basiert auf aktualisieren. Ich habe es versucht, es zu einem 'langen' auch zu analysieren, wie in WHERE _id = 'rowId'' –
Ok, hat es zur Arbeit, Seit du warst, war die einzige Antwort, und war im Wesentlichen richtig, mein 'WHERE' sehend Aussage war durcheinander, ich markiere deine als richtig. Vielen Dank. –
@BillGary für die Vollständigkeit bitte aktualisieren Sie Ihre Frage mit Ihrer Lösung, die schließlich funktioniert. Danke. –