J'ai besoin de passer la variable de taux de change de mon dépôt au viewmodel. Dans viewmodel, j'ai une méthode calculateRate, là après avoir cliqué sur le bouton, j'obtiens les devises à la question rétrofit et ensuite rétrofit récupère les données du web. Dans la variable de taux de change, j'ai l'échange de deux devises et je dois la passer au viewmodel. Comment faire ?
Dépôt
public class CurrencyRepository {
private ApiInterface apiInterface;
private String apiKey = ApiClient.KEY;
private String TAG = "REPOSITORY ";
public CurrencyRepository(Application application) {
apiInterface = ApiClient.getClient();
}
public LiveData getCurrency(String base, final String target, String apiKey) {
final MutableLiveData data = new MutableLiveData<>();
apiInterface.getCurrentCurrency(base, target, apiKey).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
data.setValue(response.body());
String get = data.getValue().getTarget();
double rate = 0;
DecimalFormat df = new DecimalFormat("0.00"); //#
switch (get) {
case "EUR":
rate = data.getValue().getRates().getEUR();
break;
case "PLN":
rate = data.getValue().getRates().getPLN();
break;
case "USD":
rate = data.getValue().getRates().getUSD();
break;
case "CHF":
rate = data.getValue().getRates().getCHF();
break;
}
Log.d(TAG, String.valueOf(df.format(rate)));
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
return data;
}
}
Viewmodel
public class MainViewModel extends AndroidViewModel {
private CurrencyRepository currencyRepository;
public final ObservableField from = new ObservableField<>();
public final ObservableField to = new ObservableField<>();
public final ObservableFloat value = new ObservableFloat();
public final ObservableField result = new ObservableField<>();
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);
}
}