Я добавил некоторый код, чтобы сделать мой вопрос более понятным.
Интерфейс модернизации:
public interface JsonPlaceHolderAPI {
public static final String BASE_URL = "https://jsonplaceholder.typicode.com/";
@GET("todos/{number}")
Call<ResponseBody> getJsonResponse(@Path("number") String number);
}
Репозиторий: -> fetchResponse () принимает MutableLiveData Viewmodel в качестве параметра и используетчтобы обновить его значение, а затем вызвать View для изменения его пользовательского интерфейса.
public class Repository {
private final JsonPlaceHolderAPI api;
public Repository() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.build();
api = retrofit.create(JsonPlaceHolderAPI.class);
}
public void fetchResponse(String number, final MutableLiveData<CharSequence> mld){
final MutableLiveData<CharSequence> ml = new MutableLiveData<>();
api.getJsonResponse(number).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
mld.setValue(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {}
});
}
}
ViewModel:
public class MainActivityViewModel extends AndroidViewModel {
MutableLiveData<CharSequence> response = new MutableLiveData<>();
Repository repository;
public MainActivityViewModel(@NonNull Application application) {
super(application);
repository = new Repository();
}
public void fetchData(String number) {
response.setValue("Loading data");
repository.fetchResponse(number, response);
}
public LiveData<? extends CharSequence> getLiveData() {
return response;
}
}
The View:
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);
initViews();
viewModel.getLiveData().observe(this, new Observer<CharSequence>() {
@Override
public void onChanged(CharSequence charSequence) {
if (charSequence != null) {
txt.setText(charSequence);
}
}
});
}
...
Я не являюсьуверен, если я должен передать MutableLiveData из viewModel в репозиторий.
Есть ли какой-нибудь рекомендуемый способ сообщить viewModel, что данные готовы к публикации из репозитория ??
Я прочитал много вопросов и статей, но до сих пор не понимаю.Я был бы рад, если бы кто-нибудь объяснил мне хороший способ добиться этого!