[英]how to fetch data from room Database kotlin
我是 RoomDatabse 的新手。 我必须在离线模式下从 Room 数据库中获取数据。 这是代码
Json
[
{"id": 1,
"name": "Hero",
"image": "https://upload.wikimedia.org/wikipedia/commons/4/41/Sunflower_from_Silesia2.jpg",
"age": "23"}
]
这是 Model
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
)
存储库 Class
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)){
//fatch data from API while Online
val result_ = actorApi.getActor()
if (result_.body()!=null){
databaseHelper.actorDao().addActor(result_.body()!!)
actorData.postValue(result_.body())
}
}else{
//fatch data from Database while Offline
}
}
}
刀Class
@Dao
interface ActorDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addActor(actorItem: List<ActorItem>)
@Query("SELECT * FROM actor")
suspend fun getActor():List<ActorItem>
}
所以虽然与网络连接数据来自API。 但是现在我在失去连接时如何从数据库中获取数据。
请像这样使用:
@Query("SELECT * FROM ActorItem")
suspend fun getActor():List<ActorItem>
使用 ActorItem 表作为 model
actorData.postValue(databaseHelper.actorDao().getActor()) 则不会出现类型不匹配错误。
你可以试试这种方式
@Query("SELECT * FROM actor")
fun getActor():LiveData<List<ActorItem>>
那你可以试试
actorDao.getActor().observe(this, Observer<List<ActorItem>>() {
@Override
public void onChanged(List<ActorItem> actorItemList) {
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.