片段中未观察到LiveData

时间:2020-06-15 17:48:26

标签: android android-fragments android-architecture-components mutablelivedata

我正在片段中调用API。我创建了一个ViewModel,它由Activity和片段共享。我正在使用此视图模型来调用API并观察Fragment中的实时数据。每次API在ViewModel中获取响应并将结果设置为实时数据时,UI(fragment)都会观察实时数据。

但是当我更改应用程序的语言并重新创建应用程序活动时,就会出现问题。视图模型的API响应方法再次被UI调用但未被观察到。仅在首次安装应用程序且我更改了应用程序语言时才会出现此问题。 现在关闭应用程序,然后重新启动。一切正常

片段:

class MyFragment : Fragment(){

    private lateinit var viewModel: MyVM

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewModel = ViewModelProviders.of(activity!!).get(MyVM::class.java)
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel.getupdate()
        observerUpadtes
    }

     private fun observerUpadtes() {

        viewModel.livedata.observe(viewLifecycleOwner, Observer { model ->

            // job to do

            } })
    }
}

ViewModel:

class MyVM(application: Application) : AndroidViewModel(application) {

    var ctx: Application = application
    var livedata: MutableLiveData<ResponseType> = MutableLiveData()
    fun getUpdate() {
        val apiService = ApiClient.create(ctx)
        val observable: Observable<ResponseType> = apiService.update()

        observable
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                { result ->

                    livedata.value = result
                },
                { errorModel ->
                    if (errorModel is HttpException) {

                        val errorBody = errorModel.response().errorBody()?.string()
                        try {
                            val jsonObject: JSONObject = JSONObject(errorBody)
                            Utils.showToastL(ctx, jsonObject.getString("msg"))
                        } catch (exception: Exception) {
                            Log.d("Exception Occured ", exception.toString())

                        }

                    }
                })
}

0 个答案:

没有答案