android - Android Room:有没有办法返回查询成功或空的变量?
问题描述
有没有办法在查询成功时返回,例如插入、更新和返回空查询(即:当您从数据库中获取某些内容并且数据库为空时)?
*编辑我问的原因是因为我想关闭微调器,但由于数据库为空,因此永远不会调用观察者函数。
流程是,视图调用getAll()
函数并从数据库中检索列表,从那里,列表中的项目被发送到 API 并将对象返回到列表中LiveData
道
@Dao
interface Dao {
@Insert
suspend fun insert(object: Object)
@Update
suspend fun update(object: Object)
@Delete
suspend fun delete(object: Object)
@Query("SELECT * FROM table")
suspend fun getAll(): List<String>
@Query("DELETE FROM table")
suspend fun deleteAll()
}
回购
fun getObject(list: List<String>): LiveData<ArrayList<Object>> {
val tempList: ArrayList<Object> = ArrayList()
if (list.isEmpty())
return MutableLiveData()
list.forEach {item ->
objects = jsonApi.getObject(item, API_KEY)
objects.enqueue(object : Callback<Object> {
override fun onFailure(call: Call<Object>?, t: Throwable?) {
Log.d("Error", "Code: " + t.toString())
}
override fun onResponse(call: Call<Object>?, response: Response<Object>?) {
if (response!!.isSuccessful) {
tempList.add(response.body()!!)
liveDataList.value = tempList
}
}
})
}
return liveDataList
}
suspend fun getAll(): List<String> {
return dao.getAll()
}
视图模型
private fun getObject(list: List<String>): LiveData<ArrayList<Object>> {
return repo.getObject(list)
}
fun getAll(): LiveData<ArrayList<Object>> = runBlocking {
return@runBlocking getObject(repo.getAll())
}
看法
mainActivityViewModel.getAll().observe(this, Observer {list ->
adapter.setList(list)
recyclerView.adapter = adapter
progressSpinner.visibility = View.GONE
})