如何从房间数据库kotlin中获取数据
Posted
技术标签:
【中文标题】如何从房间数据库kotlin中获取数据【英文标题】:how to fetch data from room Database kotlin 【发布时间】: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 响应中。
类型不匹配。要求:演员!找到:列表
【参考方案1】:
请这样使用:
@Query("SELECT * FROM ActorItem")
suspend fun getActor():List<ActorItem>
使用 ActorItem 表作为模型
actorData.postValue(databaseHelper.actorDao().getActor()) 那么您将不会收到类型不匹配错误。
【讨论】:
【参考方案2】:你可以试试这个方法
@Query("SELECT * FROM actor")
fun getActor():LiveData<List<ActorItem>>
那你可以试试
actorDao.getActor().observe(this, Observer<List<ActorItem>>()
@Override
public void onChanged(List<ActorItem> actorItemList)
)
【讨论】:
以上是关于如何从房间数据库kotlin中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin - 如何执行 onCompleteListener 从 Firestore 获取数据?
如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?
如何使用Kotlin从Firestore中的数组字段中获取数据?
如何在 Android Studio 中使用 Kotlin 从 Firestore 数据库中获取下一条和上一条数据?