Вы можете сделать это так:
Определите rate
как поле LiveData
вместо локальной переменной:
public class CurrencyRepository {
private ApiInterface apiInterface;
private String apiKey = ApiClient.KEY;
private String TAG = "REPOSITORY ";
private MutableLiveData<Double> rate = new MutableLiveData(); //or new it in constructor
....
Тогда в вашем методе вызова службы вам нужно сделать это:
public MutableLiveData<Currency> getCurrency(String base, final 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());
String get = data.getValue().getTarget();
DecimalFormat df = new DecimalFormat("0.00"); //#
switch (get) {
case "EUR":
rate.postValue(data.getValue().getRates().getEUR());
break;
case "PLN":
rate.postValue(data.getValue().getRates().getPLN());
break;
case "USD":
rate.postValue(data.getValue().getRates().getUSD());
break;
case "CHF":
rate.postValue(data.getValue().getRates().getCHF());
break;
}
Log.d(TAG, String.valueOf(df.format(rate)));
}
@Override
public void onFailure(Call<Currency> call, Throwable t) {
}
});
return data;
}
Добавьте getter
для ставки в вашем хранилище:
public LiveData<Double> getRate() {
return rate;
}
А в вашем ViewModel
вам нужен метод для получения rate
из хранилища:
public class MainViewModel extends ViewModel {
...
public LiveData<Double> getRate(){
return currencyRepository.getRate();
}
}
И готово!
Теперь вы можете наблюдать getRate()
метод вашего View Model
и реагировать на его значение в методе onChange()
вашего наблюдателя.