Android Contentprovider – actualización dentro de un método de inserción
¿Es correcto llamar al método de actualización SQLiteDatabase
en el método insert()
overridden de un proveedor de contenido?
- ContentObservers son inútiles
- ¿Cómo insertar correctamente valores en la base de datos SQLite utilizando el método insert () de ContentProvider mediante un CursorLoader?
- OnCreate del proveedor de contenido
- ProviderTestCase2.getProvider () es nulo
- Android duplica el problema de la autoridad del proveedor
- Escuchar los cambios en el calendario de Android. (Sincronizar / Borrar / Insertar etc.)
- Proveedor de calendario de Android: ¿Existe un identificador único para eventos, utilizable en varios dispositivos?
- Android Sincronización automática con datos personalizados
- Android: Ampliación del libro de contactos del usuario. Rendimiento ContentProvider vs Sqlite vs Lista en la memoria
- Codifique el cuerpo del mensaje SMS de ContentResolver en UTF-8
- ¿Qué puede causar StaleDataException distinto de llamar prematuramente cursor.close ()?
- Consultar proveedor de contenido de Android desde la línea de comandos (shell de anuncios)
- ¿Qué es una Clase de Contrato y cómo se usa
Básicamente está bien, pero ya que no proporcionó el código, sólo puedo publicar 2 posibles formas de hacerlo
Primero:
// In your content provider public Uri insert(...) { long insertId = db.insert(...); if(insertId == -1) { // insert failed, do update db.update(...); } }
Segundo:
public Uri insert(...) { long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE) if(insertId == -1) { // insert and update/replace failed } }
Consulta SQLiteDatabase como referencia en el cuarto parámetro. En la mayoría de los casos, el último método debe ser suficiente, a menos que sólo desee actualizar ciertos campos si la fila existe y tiene todos los campos si no.
La necesidad más útil para insertWithOnConflict puede ser, que podría insertar una fila y si ya existe, ignorar la inserción y en su lugar devolver la Uri / clave principal de la fila ya existente.
Es su elección lo que escribe en sus métodos anulados. Así que sí, está bien.
No sé lo que estás tratando de hacer, pero quizás quieras echar un vistazo al SQLiteDatabase
replace()
SQLiteDatabase
. Tal vez sea mejor para sus necesidades.
- Cómo obtener el número de filas de un GridView?
- ¿Qué archivo de configuración prefiere leer / escribir en PreferenceFragment?