Así es como estoy insertando datos en la base de datos usando la Biblioteca de persistencia de sala:
Entidad:
@Entity
class User {
@PrimaryKey(autoGenerate = true)
public int id;
//...
}
Objeto de acceso a datos:
@Dao
public interface UserDao{
@Insert(onConflict = IGNORE)
void insertUser(User user);
//...
}
¿Es posible devolver la identificación de usuario una vez que se completa la inserción en el método anterior sin escribir una consulta de selección por separado?
android
persistent-storage
android-room
SpiralDev
fuente
fuente
int
o enlong
lugar devoid
como resultado de la@Insert
operación?aSyncTask
? ¿Cómo devuelve el valor de su función de repositorio?Respuestas:
Según la documentación aquí (debajo del fragmento de código)
Un método anotado con la
@Insert
anotación puede devolver:fuente
@Insert
función puede devolvervoid
,long
,long[]
oList<Long>
. Por favor intente esto.fuente
return Single.fromCallable(() -> dbService.YourDao().insert(mObject));
El valor de retorno de la inserción para un registro será 1 si su estado de cuenta es exitoso.
En caso de que desee insertar una lista de objetos, puede ir con:
Y ejecútelo con Rx2:
fuente
Obtenga la ID de fila por el siguiente fragmento de código. Utiliza invocable en un ExecutorService with Future.
Ref: Tutorial de Java Executor Service para obtener más información sobre Callable.
fuente
En su Dao, la consulta de inserción devuelve,
Long
es decir, el rowId insertado.En su clase de Modelo (Repositorio): (MVVM)
En su clase ModelView: (MVVM) Maneje LiveData con DisposableSingleObserver.
Referencia del proveedor de trabajo: https://github.com/SupriyaNaveen/CookingRecipes
fuente
Después de mucha lucha, logré resolver esto. Aquí está mi solución usando la arquitectura MMVM:
Student.kt
StudentDao.kt
StudentRepository.kt
StudentViewModel.kt
En el fragmento:
He usado DataBinding. Aquí está mi XML:
He luchado mucho para lograr esto con asynctask ya que la operación de inserción y eliminación de la sala debe hacerse en un hilo separado. Finalmente capaz de hacer esto con Single type observable en RxJava.
Aquí están las dependencias de Gradle para rxjava:
fuente
De acuerdo con la documentación, las funciones anotadas con @Insert pueden devolver el rowId.
El problema que tengo con esto es que devuelve el Id. De fila y no el ID y todavía no he descubierto cómo obtener el ID utilizando el ID de fila.
Lamentablemente no puedo comentar todavía, porque no tengo 50 reputación, por lo que estoy publicando esto como una respuesta.
fuente