视图模型中的 distinctUntilChanged 不返回新获取的数据
distinctUntilChanged in viewmodel not returning newly fetched data
我正在使用一个简单的搜索视图,当我提交一个新字符串以在我的端点进行搜索时,它应该 return 一个不同的列表,而当我更改该字符串时它不会 return 新请求的列表,而只是 return 与我首先获取的列表相同
查看
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}
})
}
视图模型
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 没有为新搜索的饮料重新获取我的端点,而是总是 returns margarita list of drinks
在一些外部技术支持下,答案是
interface WebService {
@GET("search.php?s=")
suspend fun getTragoByName(@Query("tragoName") tragoName:String): DrinkList
@GET("filter.php?a=")
suspend fun getAlcoholicDrink(@Query("alcoholicOrNot") alcoholicOrNot:String): DrinkList
}
应该是
interface WebService {
@GET("search.php")
suspend fun getTragoByName(@Query("s") tragoName:String): DrinkList
@GET("filter.php")
suspend fun getAlcoholicDrink(@Query("a") alcoholicOrNot:String): DrinkList
}
我正在使用一个简单的搜索视图,当我提交一个新字符串以在我的端点进行搜索时,它应该 return 一个不同的列表,而当我更改该字符串时它不会 return 新请求的列表,而只是 return 与我首先获取的列表相同
查看
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}
})
}
视图模型
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 没有为新搜索的饮料重新获取我的端点,而是总是 returns margarita list of drinks
在一些外部技术支持下,答案是
interface WebService { @GET("search.php?s=") suspend fun getTragoByName(@Query("tragoName") tragoName:String): DrinkList @GET("filter.php?a=") suspend fun getAlcoholicDrink(@Query("alcoholicOrNot") alcoholicOrNot:String): DrinkList }
应该是
interface WebService {
@GET("search.php")
suspend fun getTragoByName(@Query("s") tragoName:String): DrinkList
@GET("filter.php")
suspend fun getAlcoholicDrink(@Query("a") alcoholicOrNot:String): DrinkList
}