Я пытаюсь получить обменные курсы от центрального банка. К сожалению, у них нет api, которые могут предоставлять данные в JSON. Только в XML. Я использую retrogit 2. Я уже создал два класса, которые описывают xml, что я получил с веб-сайта. Но когда я попытался получить ответ обратного вызова, я получил код ошибки 404. Возможно, мой @GET
не работает? Пожалуйста, помогите мне!Анализ XML с использованием Retrofit 2
Первый фрагмент XML. он содержит массив валют на дату:
<ValCurs Date="14.01.2017" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>44,5156</Value>
</Valute>
А вот мой интерфейс:
public interface CbClient {
@GET("/XML_daily.asp")
Call<ValuteOnDate> getValuteOnDate();
}
И класс генератора Услуги: ...
public class ServiceGenerator {
public static final String API_BASE_URL = "http://www.cbr.ru/scripts/";
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
private static Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create());
public static <S> S createService(Class<S> serviceClass) {
Retrofit retrofit = builder.client(httpClient.build()).build();
return retrofit.create(serviceClass);
}
}
А вот класс MainActivity: ...
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TestRetrofitClien";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CbClient client = ServiceGenerator.createService(CbClient.class);
Call<ValuteOnDate> call = client.getValuteOnDate();
call.enqueue(new Callback<ValuteOnDate>() {
@Override
public void onResponse(Call<ValuteOnDate> call, Response<ValuteOnDate> response) {
try {
if (response.isSuccessful()) {
ValuteOnDate valuteOnDate = call.execute().body();
Log.i(TAG,"valuteOnDate: " + valuteOnDate);
ValuteOnDate valuteFromResponse = response.body();
Log.i(TAG,"valuteFromResponse: " + valuteFromResponse);
}else {
Log.e(TAG, "Retrofit Response: " + response.errorBody().string());
Log.d(TAG, "Error message: " + response.raw().message());
Log.d(TAG,"Error code: " + String.valueOf(response.raw().code()));
}
} catch (IOException e) {
Log.e("LOG", "Exeption: " + e);
}
}
@Override
public void onFailure(Call<ValuteOnDate> call, Throwable t) {
}
});
}
}
Вы можете отправить сообщение об ошибке? возможно, удалить ведущую косую черту в @GET ("/ XML_daily.asp") –
Да. Уже исправлено. Это была проблема. Если вы разместите свой комментарий в качестве ответа, я приму его. – Kroha