Android ContentProvider - aggiornamento all'interno di un metodo di inserimento
-
28-09-2019 - |
Domanda
E 'ok per chiamare il metodo di aggiornamento SQLiteDatabase
nel insert()
override metodo di un fornitore di contenuti?
Soluzione
In sostanza è bene, ma dal momento che non è stato fornito il codice, ho appena posso postare 2 modi possibili per esso
Per prima cosa:
// In your content provider
public Uri insert(...) {
long insertId = db.insert(...);
if(insertId == -1) {
// insert failed, do update
db.update(...);
}
}
Secondo:
public Uri insert(...) {
long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)
if(insertId == -1) {
// insert and update/replace failed
}
}
SQLiteDatabase per riferimento sul parametro via. Nella maggior parte dei casi l'ultimo metodo dovrebbe essere sufficiente, a meno che non si desidera solo alcuni campi in fase di aggiornamento, se esiste la riga e hanno tutti i campi se non lo fa.
La maggior parte necessità utile per insertWithOnConflict può essere, che si potrebbe inserire una riga e se esiste già, ignorare l'inserto e invece riportare la chiave Uri / primaria della riga già esistente.
Altri suggerimenti
E 'la vostra scelta ciò che si scrive nei vostri metodi sostituiti. Quindi sì, è ok.
Non so quello che stai cercando di fare, ma si potrebbe desiderare di dare un'occhiata al metodo SQLiteDatabase
del replace()
troppo. Forse è meglio si adatta alle tue esigenze.