Как правильно в MVVM получить модифицированные данные из репозитория в viewmodel? - PullRequest
0 голосов
/ 30 декабря 2018

Я знаю, как получить данные от счетчиков и затем передать данные из API в хранилище, но как в моем случае получить данные из хранилища для корректного просмотра модели в mvvm?В репозитории у меня есть объект Currency в MutableLiveData, и я хочу получить данные из этого объекта.

public class MainViewModel extends AndroidViewModel {

private CurrencyRepository currencyRepository;
public final ObservableField<String> from = new ObservableField<>();
public final ObservableField<String> to = new ObservableField<>();
public final ObservableFloat value = new ObservableFloat();
private MutableLiveData<Currency> currencyLiveData;
String TAG = "MAIN";

public MainViewModel(Application application) {
   super(application);
   currencyRepository = new CurrencyRepository(application);
}

public void calculateRate() {
    currencyRepository.getCurrency(String.valueOf(from.get()), String.valueOf(to.get()), ApiClient.KEY);

//In this method I'm passing kind of the currency from the spinners in my view
}

Репозиторий:

public class CurrencyRepository {

private ApiInterface apiInterface;
private  String apiKey = ApiClient.KEY;

public CurrencyRepository(Application application) {
   apiInterface = ApiClient.getClient();
}

public LiveData<Currency> getCurrency(String base, String target, String apiKey) {

    final MutableLiveData<Currency> data = new MutableLiveData<>();
    apiInterface.getCurrentCurrency(base, target, apiKey).enqueue(new Callback<Currency>() {
        @Override
        public void onResponse(Call<Currency> call, Response<Currency> response) {
            data.setValue(response.body());

        }

        @Override
        public void onFailure(Call<Currency> call, Throwable t) {

        }
    });
    return data;
}

}

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Концепция MVVM заключается в том, что у View есть ссылка на ViewModel, но у ViewModel нет ссылки на View.То же самое относится и к дереву для отношений между ViewModel и Repository.

Вы используете LiveData для репозитория, и это здорово.Вам нужно будет заставить ViewModel подписаться на LiveData и затем передать свои изменяющиеся данные любым наблюдателям (ViewModel)

Я обнаружил, что это отличное видео для просмотра: https://www.youtube.com/watch?v=ugpC98LcNqA&t=6s

Вы также можете ознакомиться с некоторыми примерами Googles: https://github.com/googlesamples/android-architecture

0 голосов
/ 30 декабря 2018

Хороший approuch делает это с ReactiveX.В Java это RxJava. Здесь вы можете увидеть пример с описанием .

...