Я пытаюсь реализовать архитектуру MVVM в Котлине, используя привязку данных. код просто показывает пустой экран в качестве вывода. Может ли кто-нибудь помочь мне выяснить, почему при выполнении этой программы нет вызова на сервер.
Я попытался это и ссылки, подобные этой, чтобы решить эту проблему.
Мой код выглядит следующим образом:
MainActivity
class MainActivity : AppCompatActivity() {
private var cvViewModel: CvViewModel? = null
private var model: Model?= null
private var liveData: LiveData<Model>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding : ActivityMainBinding= DataBindingUtil.setContentView(this, R.layout.activity_main)
// setContentView(R.layout.activity_main)
cvViewModel= ViewModelProviders.of(this).get(CvViewModel::class.java)
liveData= cvViewModel.getNewsRepository()
}
}
class CvRepository {
private val apiCall: ApiCall=
RetrofitClient.cteateService(ApiCall::class.java)
fun getCvDetails(): MutableLiveData<Model> {
val cvData = MutableLiveData<Model>()
apiCall.getCvData().enqueue(object : Callback<Model> {
override fun onResponse(call: Call<Model>,
response: Response<Model>
) {
if (response.isSuccessful) {
Log.e("abc", ""+response.body().toString())
cvData.value = response.body()
}
}
override fun onFailure(call: Call<Model>, t: Throwable) {
cvData.value = null
}
})
return cvData
}
companion object {
private var cvRepository: CvRepository ? = null
val instance: CvRepository
get() {
if (cvRepository == null) {
cvRepository = CvRepository()
}
return this.cvRepository as CvRepository
}
}
}
class CvViewModel: ViewModel(){
private var mutableLiveData: MutableLiveData<Model>? = null
private var cvRepository: CvRepository? = null
fun init() {
if (mutableLiveData != null) {
return
}
cvRepository = CvRepository.instance
mutableLiveData = cvRepository!!.getCvDetails()
}
fun getNewsRepository(): LiveData<Model>? {
return mutableLiveData
}
}