Может кто-нибудь объяснить мне, почему мои MutableLiveData всегда "нулевые"? В другом проекте я не сделал это так же, как здесь, и это работает. Может быть, я слепой или что-то, и я не вижу легких ошибок или что-то.
class HomeViewModel : ViewModel() {
val mutableLiveData = MutableLiveData<String>()
fun setString(word: String) {
mutableLiveData.value = word
}
fun getString(): LiveData<String> {
return mutableLiveData
}
}
class HomeFragment : Fragment() {
lateinit var homeViewModel: HomeViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_home, container, false)
val textView: TextView = root.findViewById(R.id.text_home)
homeViewModel = activity!!.run {
ViewModelProviders.of(this).get(HomeViewModel::class.java)
}
homeViewModel.getString().observe(this, Observer<String>{
t -> textView.text = t
})
AsyncTaskAllInvoices(ApiConnection().connectionApiInitialize(), this).execute()
return root
}
}
class AsyncTaskAllInvoices(val apiService: ApiService, val activity: HomeFragment) : AsyncTask<Any, Any, Any>() {
override fun doInBackground(vararg params: Any?) {
ApiConnection().showAllInvoices(apiService, activity)
}
}
class ApiConnection: Fragment() {
private lateinit var homeViewModel: HomeViewModel
fun connectionApiInitialize(): ApiService {
val retrofit = Retrofit.Builder()
.baseUrl(LocalVariables.baseApiURl)
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(ApiService::class.java)
}
fun showAllInvoices(apiService: ApiService, activity: Fragment) {
homeViewModel = activity!!.run {
ViewModelProviders.of(activity).get(HomeViewModel::class.java)
}
val call = apiService.getAllInvoices()
call.enqueue(object: Callback<List<InvoiceResponse>> {
override fun onFailure(call: Call<List<InvoiceResponse>>?, t: Throwable?) {
Log.v("parser", "call onFailure")
}
override fun onResponse(call: Call<List<InvoiceResponse>>?, response: Response<List<InvoiceResponse>>?) {
if (response != null) {
if (response.isSuccessful()) {
homeViewModel.setString(response!!.body()!![0].driver)
Log.v("parser", homeViewModel.getString().value)
}
}
}
})
}
}
Когда я использую:
Log.v("parser", homeViewModel.getString().value)
в onResponse я получаю значение, которое должно быть, но оно не обновляется в мой фрагмент деятельности. Есть идеи?
Спасибо: _)