Как получить список LiveData, используя Retrofit GET, чтобы заполнить recyclerView.Мой код не показывает данные на экране.Вызывается ли onChange (), если я не изменяю существующий список, а начинаю с новых данных в первый раз?
MainActivity, где я вызываю ViewModel для проверки данных и загрузки при установке в адаптер:
var mContactViewModel = ViewModelProviders.of(this).get(ContactViewModel::class.java)
mContactViewModel.getContacts(this)?.observe(this, object : Observer<List<Contact>> {
override fun onChanged(contactsList: List<Contact>?) {
loading_contacts_list.visibility = View.GONE
if(contactsList!!.isNotEmpty()){
rv_users.adapter = ContactsAdapter(contactsList, onContactClick, context)
} else {
//TODO throw exception
println("list of contacts returned empty")
}
}
})
Класс ContactViewModel, где я оборачиваю функцию getContact из ContactRepository:
class ContactViewModel(application: Application) : AndroidViewModel(application) {
private val mRepository: ContactRepository
init {
mRepository = ContactRepository()
}
fun getContacts(context: Context) : LiveData<List<Contact>>? {
return mRepository.getContacts(context)
}
}
Класс ContactRepository, где Retrofit делает запрос GET, помещает LiveData> в список внутри этого класса и возвращает его:
class ContactRepository {
var allContacts: LiveData<List<Contact>>? = null
var call: Call<LiveData<List<Contact>>>
init {
var requestService: RequestService = RetrofitClient().getClient(MY_URL)!!.create(RequestService::class.java)
call = requestService.getContacts()
}
fun getContacts(context: Context) : LiveData<List<Contact>>? {
call.enqueue(object : Callback<LiveData<List<Contact>>> {
override fun onFailure(call: Call<LiveData<List<Contact>>>, t: Throwable) {
Log.e("Tag onfailure", "retrofit on failure", t)
}
override fun onResponse(call: Call<LiveData<List<Contact>>>, response: Response<LiveData<List<Contact>>>) {
if(response.isSuccessful)
allContacts = response.body()
}
})
return allContacts
}
}