android - 我从使用 MVVM 的改造中得到了多个响应 - kotlin

标签 android kotlin mvvm retrofit2

我刚开始学习 MVVM,但我无法找出为什么我多次从改造中得到响应。
我正在关注有关如何在 kotlin 中实现 MVVM 的视频,如果您提出更好的方法,我将非常高兴。
这是存储库 (我正在使用 jsonplaceholder 来获取用户):

class HelpersRepository(val application: Application) {
val showProgress = MutableLiveData<Boolean>()
val helpersList = MutableLiveData<List<Helpers>>()

fun getAllHelpers() {
    showProgress.value = true

    val destinationService  = ServiceBuilder.buildService(HelpersNetwork::class.java)
    val requestCall = destinationService.getHelpers()
        requestCall.enqueue(object : Callback<List<Helpers>>{
        override fun onResponse(call: Call<List<Helpers>>, response: Response<List<Helpers>>) {
                helpersList.value = response.body()
                Log.d("response", "${helpersList.value}")
                showProgress.value = false

        }

        override fun onFailure(call: Call<List<Helpers>>, t: Throwable) {
            showProgress.value = false
            Toast.makeText(application, "Error while fetching the data", Toast.LENGTH_SHORT).show()
        }

    })
}}
这是查看型号 :
class HelpersViewModel(application: Application) : AndroidViewModel(application) {
    private val repository = HelpersRepository(application)
    val showProgress : LiveData<Boolean>
    val helpersList : LiveData<List<Helpers>>


    init {
        this.showProgress = repository.showProgress
        this.helpersList = repository.helpersList
    }

    fun getAllHelpers() {
            repository.getAllHelpers()
    }
}
这是我的 fragment :
class HelpersFragment : Fragment() {
    private lateinit var viewModel: HelpersViewModel
    private lateinit var adapter: HelpersAdapter

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        return inflater.inflate(R.layout.fragment_helpers, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel = ViewModelProvider(this).get(HelpersViewModel::class.java)
        adapter = HelpersAdapter(requireContext())
        rv_helpers.adapter = adapter

        viewModel.getAllHelpers()

        viewModel.showProgress.observe(viewLifecycleOwner, Observer {
            if (it) {
                pb_helpers.visibility = View.VISIBLE
            } else {
                pb_helpers.visibility = View.GONE
            }
        })

        viewModel.helpersList.observe(viewLifecycleOwner, Observer {
            adapter.setHelpersList(it)
        })
    }
}
viewModel.getAllHelpers()在 fragment 中被调用,日志显示响应三次(我无法复制日志,因为 StackOverflow 认为它是垃圾邮件)。
附言如果我把 viewModel.getAllHelpers()setOnclickListener 内在按钮上,然后它只获取一次数据。
我到处搜索,但无法找到适合我的问题的答案。我意识到我做错了什么,但无法弄清楚到底是什么

最佳答案

我终于发现我的问题来自在 MainActivity 中选择暗模式。原来你必须打电话:AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)之前 setContentView()onCreate

关于android - 我从使用 MVVM 的改造中得到了多个响应 - kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64507481/

相关文章:

android - onClick 不适用于自定义对话框

java - 如何运行与 Android Studio 在提交时执行的代码分析相同的代码分析?

android - 为 iOS 和 Android 提供不同的 Progressive Web App UI

android - 有没有办法改变菜单项图标和文本的颜色?

android - Kotlin + Dagger 2 : cannot be provided without an @Provides-annotated method

c# - observablecollection 到 dataView 或 dataset

android - 如何在运行时更改实现

android - 在 Kotlin 中选择选项卡或滑动页面时如何加载 fragment

wpf - 如何在选择列表框中的项目时打开新的用户控件?

c# - DisplayAttribute 未在模型中本地化其属性