我是 RoomDatabse 的新手。我必須在離線模式下從 Room 資料庫中獲取資料。這是代碼
杰森
[
{"id": 1,
"name": "Hero",
"image": "https://upload.wikimedia.org/wikipedia/commons/4/41/Sunflower_from_Silesia2.jpg",
"age": "23"}
]
這是模型
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 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
}
}
}
道類
@Dao
interface ActorDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun addActor(actorItem: List<ActorItem>)
@Query("SELECT * FROM actor")
suspend fun getActor():List<ActorItem>
}
所以雖然與網路連接的資料來自API。但是現在我如何在失去連接時從資料庫中獲取資料。
uj5u.com熱心網友回復:
請像這樣使用:
@Query("SELECT * FROM ActorItem")
suspend fun getActor():List<ActorItem>
使用 ActorItem 表作為模型
actorData.postValue(databaseHelper.actorDao().getActor()) 那么你不會得到型別不匹配的錯誤。
uj5u.com熱心網友回復:
你可以試試這種方式
@Query("SELECT * FROM actor")
fun getActor():LiveData<List<ActorItem>>
那你可以試試
actorDao.getActor().observe(this, Observer<List<ActorItem>>() {
@Override
public void onChanged(List<ActorItem> actorItemList) {
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388599.html
標籤:安卓 科特林 虚拟机 android-room
