使用Retrofit 2解析XML [英] Parsing XML using Retrofit 2

查看:81
本文介绍了使用Retrofit 2解析XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从中央银行获得汇率.不幸的是,他们没有可以以JSON提供数据的api.仅在XML中.我正在使用Retrogit2.我已经创建了两个类,它们描述xml,这是我从网站上获得的.但是,当我尝试获取回调的响应时,出现了404错误代码.也许我的 @GET 方法不正确?请帮帮我!

I trying to get exchange rates from central bank. Unfortunately they don't have api, which can provide data in JSON. Only in XML. I'm using retrogit 2. I already created two classes, which describe xml, what I got from web site. But when I tried to get callback's response I got an 404 error code. Maybe my @GET method isn't correct? Please help me!

第一个XML片段.它包含日期上的货币数组:

First XML fragment. it contains array of currencies on a date:

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

和服务生成器类:...

And Service generator class:...

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类:...

And here is MainActivity class:...

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")中的斜杠

Remove the leading slash in @GET("/XML_daily.asp")

这篇关于使用Retrofit 2解析XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆