如何解决房间查询呼叫同步问题
所以我创建了一个房间数据库,目前我遇到了从数据库中获取字符串的问题,而我又想用它来显示在警报对话框中。到目前为止,我尝试了以下两种方式:
binding.btnGetRandomMeal.setOnClickListener {
mMealViewModel.setTagQuery(binding.etSearchTag.text.toString())
mMealViewModel.dataToUi.observe(viewLifecycleOwner){result -> result?.apply {
item = result
binding.textView.text = item
askUserForAcceptance(binding.textView.text.toString()) // Variant 1
}}
askUserForAcceptance(binding.textView.text.toString()) // Variant 2
}
private fun askUserForAcceptance(item: String) {
val builder = AlertDialog.Builder(requireContext())
builder.setPositiveButton("Yes"){_,_->
Toast.makeText(requireContext(),"Successfully added.",Toast.LENGTH_SHORT).show()
findNavController().navigate(R.id.action_getMealFragment_to_dashboardFragment)
}
builder.setNegativeButton("No") {_,_ ->}
builder.setTitle("Random Meal?")
builder.setMessage("Do you want to accept $item?")
builder.create().show()
}
这里的问题是,一旦弹出警报对话框,我有时必须多次按 No 才能再次关闭它并且 $item 会发生变化。
在第二个变体中,我在括号外使用了 askUserForAcceptance
方法,这导致 alertdialog 始终显示上次按下的 $item,如下所示:
Textview.text = "Textview" -> 按下按钮 -> Textview.text = "XYZ" -> alertdialog $item = "Textview" -> 按下按钮 -> Textview.text = "ABC" -> alertdialog $item = "XYZ
** 视图模型**
class MealViewModel(application: Application): AndroidViewModel(application) {
private val repository: MealRepository
init {
val mealDao = MealDatabase.getDatabase(application).mealDao()
repository = MealRepository(mealDao)
}
private val _dataToUi = MutableLiveData<String>()
val dataToUi: LiveData<String>
get() = _dataToUi
suspend fun getSpecificMeal(tag: String): String? {
return withContext(Dispatchers.IO){
repository.getSpecificMeal(tag)
}
}
fun setTagQuery(tag: String){
viewModelScope.launch {
_dataToUi.value = getSpecificMeal(tag)
}
}
存储库
class MealRepository(private val mealDao: MealDao) {
suspend fun getSpecificMeal(tag: String): String{
return withContext(Dispatchers.IO){
mealDao.getSpecificMeal(tag)
}
}
}
DAO
@Dao
interface MealDao {
@Query("SELECT name FROM meal_data WHERE tag1 LIKE '%' || :tag || '%' OR tag2 LIKE '%' || :tag || '%'
OR tag3 LIKE '%' || :tag || '%' ORDER BY RANDOM() LIMIT 1")
fun getSpecificMeal(tag: String): String
提前感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。