this is the first time I\'m trying to implement MVVM architecture, and I\'m a bit confused about the correct way to make an API call.
Currently, I\'m just trying to
I just inspired by Google's Demo and created a library, which can add LiveData support for Retrofit. The usage is simple:
Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(LiveDataCallAdapterFactory())
.build()
.create(GithubService::class.java)
.getUser("shawnlinboy").observe(this,
Observer { response ->
when (response) {
is ApiSuccessResponse -> {
//success response
}
else -> {
//failed response
}
}
})
The library site: https://github.com/shawnlinboy/retrofit-livedata-adapter
There are 3 problems in your code.
MutableLiveData
object because you have an empty response before API call then your LiveData
object will be filled somehow through the IGDB response.private MutableLiveData<List<Game>> mGameList = new MutableLiveData();
//...
public LiveData<List<Game>> getGameList() {
return mGameList;
}
mGameList
instead of setting its value, So try to change:Timber.d("Call response body not null");
mGameList = response.body();
to
mGameList.setValue(response.body());
ViewModel
class is avoiding separation of concerns. It's better to create a repository module and get your response through an interface. Read this article for details.Repository modules are responsible for handling data operations. They provide a clean API to the rest of the app. They know where to get the data from and what API calls to make when data is updated. You can consider them as mediators between different data sources (persistent model, web service, cache, etc.).