I\'ve added some code to make my question more clear.
Retrofit interface:
public interface JsonPlaceHolderAPI {
public static final String BASE_U
public interface TodoApi {
@GET("todos/")
Call> getTodos();
@GET("todos/{id}")
Call getTodo(@Path("id") long id);
}
public class TodoRepository {
private static final String TAG = "TodoRepository";
private static final TodoRepository ourInstance = new TodoRepository();
private TodoApi api;
private MutableLiveData> todoListLiveData = new MutableLiveData<>();
private MutableLiveData todoLiveData = new MutableLiveData<>();
public static TodoRepository getInstance() {
return ourInstance;
}
private TodoRepository() {
api = ApiBuilder.create(TodoApi.class);
}
public LiveData> getTodos() {
api.getTodos().enqueue(new Callback>() {
@Override
public void onResponse(@NonNull Call> call, @NonNull Response> response) {
todoListLiveData.setValue(response.body());
}
@Override
public void onFailure(@NonNull Call> call, @NonNull Throwable t) {
Log.d(TAG, "onFailure: failed to fetch todo list from server");
}
});
return todoListLiveData;
}
public LiveData getTodo(long id) {
api.getTodo(id).enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) {
todoLiveData.setValue(response.body());
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
Log.d(TAG, "onFailure: failed to get todo");
}
});
return todoLiveData;
}
}
public class MainActivityViewModel extends ViewModel {
private static final String TAG = "MainActivityViewModel";
private TodoRepository repository = TodoRepository.getInstance();
private MutableLiveData isLoading = new MutableLiveData<>();
private LiveData> todoLiveData;
public MainActivityViewModel() {
super();
isLoading.setValue(true);
todoLiveData = repository.getTodos();
}
@Override
protected void onCleared() {
super.onCleared();
}
public MutableLiveData getIsLoading() {
return isLoading;
}
public LiveData> getTodoLiveData() {
return todoLiveData;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
todoListRecyclerView = findViewById(R.id.todo_recycler_view);
loadingIndicator = findViewById(R.id.todo_loading_indicator);
mViewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);
getSupportActionBar().setTitle("Todos");
mViewModel.getIsLoading().observe(this, new Observer() {
@Override
public void onChanged(Boolean isLoading) {
if (isLoading) loadingIndicator.setVisibility(View.VISIBLE);
else loadingIndicator.setVisibility(View.GONE);
}
});
mViewModel.getTodoLiveData().observe(this, new Observer>() {
@Override
public void onChanged(List todos) {
mViewModel.getIsLoading().postValue(false);
initRecyclerView(todos);
}
});
}
https://github.com/AnvarNazar/RetrofitTypicodeApiExample