【发布时间】:2022-01-22 15:44:47
【问题描述】:
我是 RoomDatabse 的新手。我必须在离线模式下从 Room 数据库中获取数据。 这是代码
json
[
{"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。但是现在我在失去连接时如何从数据库中获取数据。
【问题讨论】:
-
在其他部分你可以写
actorData.postValue(databaseHelper.actorDao().getActor())这是你问的吗?还是在网络断开时想要一个监听器? -
我和你写的一样,但它说需要 Actor,但找到了 ActorList
-
请同时附上您看到的错误。附上截图或发布错误
-
如果我没记错的话,问题出在 Rest API 响应中。
-
类型不匹配。要求:演员!找到:列表
标签: android kotlin mvvm android-room