Вместо создания двух изменяемых классов.Вы можете просто создать объект-оболочку для состояния ошибки и успеха или даже для состояния загрузки
data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
companion object {
fun <T> success(data: T?): Resource<T> {
return Resource(SUCCESS, data, null)
}
fun <T> error(msg: String, data: T?): Resource<T> {
return Resource(ERROR, data, msg)
}
fun <T> loading(data: T?): Resource<T> {
return Resource(LOADING, data, null)
}
}
}
, а затем использовать данные MutableLive в качестве этого типа
final MutableLiveData<Resource<MyBeanClass>> myBeanClass = new MutableLiveData<>();
ApiInterface apiInterface = ApiClient.getClientAuthentication().create(ApiInterface.class);
Call<MyBeanClass> call = apiInterface.getData(id);
call.enqueue(new Callback<MyBeanClass>() {
@Override
public void onResponse(Call<MyBeanClass> call, Response<MyBeanClass> response) {
if(response.body()!=null) {
myBeanClass.setValue(Resource<MyBeanClass>.success(response.body));
}
}
@Override
public void onFailure(Call<MyBeanClass> call, Throwable t) {
myBeanClass.setValue(Resource<MyBeanClass>.error(t.getLocalizedMessage()));
}
});
return myBeanClass;
Вы можете проверить этот пример Googlehttps://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample