Проблема с ответом LiveData на запрос на модернизацию - PullRequest
0 голосов
/ 04 марта 2020

Может кто-нибудь объяснить мне, почему мои 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 я получаю значение, которое должно быть, но оно не обновляется в мой фрагмент деятельности. Есть идеи?

Спасибо: _)

...