2017-01-17 6 views
0

Я пытаюсь получить обменные курсы от центрального банка. К сожалению, у них нет 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) { 
     } 
    }); 
} 


} 
+0

Вы можете отправить сообщение об ошибке? возможно, удалить ведущую косую черту в @GET ("/ XML_daily.asp") –

+1

Да. Уже исправлено. Это была проблема. Если вы разместите свой комментарий в качестве ответа, я приму его. – Kroha

ответ

2

Удалить lea ding slash в @GET ("/ XML_daily.asp")