Cómo obtener datos de la base de datos de Room en Kotlin.
Soy nuevo en RoomDatabase. Tengo que obtener datos de la base de datos de Room en modo sin conexión.
aquí está el código
Json
[
{"id": 1,
"name": "Hero",
"image": "https://upload.wikimedia.org/wikipedia/commons/4/41/Sunflower_from_Silesia2.jpg",
"age": "23"}
]
Aquí está el modelo
class Actor() : ArrayList<actoritem>()
@Entity(tableName = "actor",indices = arrayOf(Index(value= arrayOf("id"),unique = true)))
data class ActorItem(
@PrimaryKey(autoGenerate = true)
val id_:Int,
@SerializedName("age")
@ColumnInfo(name = "age")
val age: String,
@SerializedName("id")
@ColumnInfo(name = "id")
val id: Int,
@SerializedName("image")
@ColumnInfo(name="image")
val image: String,
@SerializedName("name")
@ColumnInfo(name = "name")
val name: String
)
Clase Repositorio
class ReposetoryHelper(
private val actorApi: ActorApi,
private val databaseHelper: DatabaseHelper,
private val applicationContext: Context)
{
private val actorData = MutableLiveData<actor>()
val actors : LiveData<actor>
get() = actorData
suspend fun getActor(){
if(NetworkUtil.isInternetAvailable(applicationContext)){
// obtener datos de la API en línea
val result_ = actorApi.getActor()
if (result_.body()!=null){
databaseHelper.actorDao().addActor(result_.body()!!)
actorData.postValue(result_.body())
}
}else{
// obtener datos de la base de datos sin conexión
}
}
}
Clase DAO
@Dao
interface ActorDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addActor(actorItem: List<actoritem>)
@Query("SELECT * FROM actor")
suspend fun getActor():List<actoritem>
}
Por lo tanto, cuando esté conectado a la red, los datos vendrán de la API. Pero, ¿cómo obtengo los datos de la base de datos cuando pierdo la conexión?
davy.ai
Para obtener datos de la base de datos de Room en modo fuera de línea, puedes modificar la función
getActor()
de la claseRepositoryHelper
de la siguiente manera:Aquí, si no hay conexión a internet (
NetworkUtil.isInternetAvailable(applicationContext)
devuelvefalse
), los datos se obtendrán de la base de datos local de Room utilizando la funcióngetActor()
en la interfazActorDao
. Si hay datos disponibles en la base de datos, se devolverán como una lista de elementosActorItem
y se convertirán en un objetoActor
y se publicarán enactorData
LiveData
utilizando la instrucciónactorData.postValue(actor)
.Asegúrate de agregar las importaciones necesarias en tu clase.