Android 使用改型2解析XML

Android 使用改型2解析XML,android,xml,retrofit,Android,Xml,Retrofit,我试图从中央银行获得汇率。不幸的是,他们没有api,api可以提供JSON格式的数据。仅在XML中。我用的是RetroGit2。我已经创建了两个类,它们描述了我从web站点获得的xml。但当我试图得到回调的响应时,我得到了一个404错误代码。也许我的@GET方法不正确?请帮帮我 第一个XML片段。它包含日期上的货币数组: <ValCurs Date="14.01.2017" name="Foreign Currency Market"> <Valute ID="R010

我试图从中央银行获得汇率。不幸的是,他们没有api,api可以提供JSON格式的数据。仅在XML中。我用的是RetroGit2。我已经创建了两个类,它们描述了我从web站点获得的xml。但当我试图得到回调的响应时,我得到了一个404错误代码。也许我的
@GET
方法不正确?请帮帮我

第一个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>

036
澳元
1.
Австралийский доллар
44,5156
这是我的界面:

public interface CbClient {

    @GET("/XML_daily.asp")
    Call<ValuteOnDate> getValuteOnDate();
}
公共接口CbClient{
@获取(“/XML\u daily.asp”)
调用getValueOnDate();
}
和服务生成器类:

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);
    }
}
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) {
        }
    });
}


}
公共类服务生成器{
公共静态最终字符串API_BASE_URL=”http://www.cbr.ru/scripts/";
私有静态OkHttpClient.Builder httpClient=new OkHttpClient.Builder();
私有静态改装.Builder=新改装.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create());
公共静态S createService(类serviceClass){
改装改装=builder.client(httpClient.build()).build();
返回改装。创建(serviceClass);
}
}
这里是MainActivity类:

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);
    }
}
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) {
        }
    });
}


}
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串标记=“TestClien”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CbClient client=ServiceGenerator.createService(CbClient.class);
Call Call=client.getValueOnDate();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
试一试{
if(response.issusccessful()){
ValuteOnDate ValuteOnDate=call.execute().body();
Log.i(标签“ValueOnDate:+ValueOnDate”);
ValuteOnDate valuteFromResponse=response.body();
Log.i(标签“ValueFromResponse:+ValueFromResponse”);
}否则{
Log.e(标签,“改装响应:+Response.errorBody().string());
Log.d(标记,“错误消息:+response.raw().message());
Log.d(标记,“错误代码:+String.valueOf(response.raw().code()));
}
}捕获(IOE异常){
Log.e(“Log”,“Exeption:+e”);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}

删除@GET(“/XML\u daily.asp”)中的前导斜杠

删除@GET(“/XML\u daily.asp”)中的前导斜杠

您能发布错误消息吗?可能删除@GET(“/XML_daily.asp”)中的前导斜杠是的。已经修好了。这是个问题。如果你把你的评论作为答案发表,我会接受。你能发布错误消息吗?可能删除@GET(“/XML_daily.asp”)中的前导斜杠是的。已经修好了。这是个问题。如果你把你的评论作为回答,我会接受的。