我正在片段中调用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())
}
}
})
}