首页 > 解决方案 > 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
        })

标签: androidkotlinandroid-roomandroid-livedata

解决方案


推荐阅读