首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >视图模型中的distinctUntilChanged不返回新获取的数据

视图模型中的distinctUntilChanged不返回新获取的数据
EN

Stack Overflow用户
提问于 2020-07-04 08:46:13
回答 1查看 621关注 0票数 0

我正在使用一个简单的搜索视图,当我提交一个新字符串在我的端点搜索时,它应该返回一个不同的列表,相反,当我更改该字符串时,它将不会返回新请求的列表,相反,它只返回我首先获取的那个列表。

视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        setupRecyclerView()
        setupSearchView()
        setupDefaultTragosList()
    }

    private fun setupDefaultTragosList(){
        viewModel.setTrago("margarita")
        viewModel.fetchTragosList.observe(viewLifecycleOwner, Observer { result ->
            when(result){
                is Resource.Loading -> {
                    progressBar.visibility = View.VISIBLE
                }
                is Resource.Success -> {
                    progressBar.visibility = View.GONE
                    rv_tragos.adapter = MainAdapter(requireContext(),result.data,this)
                }
                is Resource.Failure -> {
                    progressBar.visibility = View.GONE
                    Log.e("MainFragment", "onRetrofitRequest: ${result.exception}")
                }
            }
        })
    }

    private fun setupSearchView(){
        searchView.setOnQueryTextListener(object:androidx.appcompat.widget.SearchView.OnQueryTextListener{

            override fun onQueryTextSubmit(query: String?): Boolean {
                viewModel.setTrago(query!!)
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {return false}
        })
    }

ViewModel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MainViewModel(private val repo:Repo):ViewModel(){

    private val tragoNameData = MutableLiveData<String>()

    fun setTrago(tragoName:String){
        tragoNameData.value = tragoName
    }

    val fetchTragosList = tragoNameData.distinctUntilChanged().switchMap { tragoName ->
        liveData(Dispatchers.IO) {
            emit(Resource.Loading())
            try{
                emit(repo.getTragosList(tragoName))
            }catch (e: Exception){
                emit(Resource.Failure(e))
            }
        }
    }
}

似乎distinctUntilChange没有为新搜索的饮料重新获取我的端点,而是总是返回玛格丽塔饮料列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 11:46:50

在一些外部技术支持下,答案是

接口WebService { @GET("search.php?s=")挂起有趣的getTragoByName(@Query("tragoName") tragoName:String):DrinkList @GET("filter.php?a=")挂起有趣的getAlcoholicDrink(@Query("alcoholicOrNot")酒精String:String):DrinkList }

应该是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface WebService {
    @GET("search.php")
    suspend fun getTragoByName(@Query("s") tragoName:String): DrinkList

    @GET("filter.php")
    suspend fun getAlcoholicDrink(@Query("a") alcoholicOrNot:String): DrinkList
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62731832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文