Как получить список LiveData с помощью Retrofit GET для заполнения recyclerView - PullRequest
0 голосов
/ 03 октября 2018

Как получить список 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
    }
}
...