如何使用改造2.0解析XML响应?

时间:2018-10-23 09:06:21

标签: android xml-parsing retrofit

您好,我是android编程的新手,我通过一些链接了解如何使用改型来解析XML响应,并且我尝试使用以下XML,如图所示。

在POJO类中是否有任何必要的更改。但正在Logcat中收到NullPointer异常。在尝试读取回复时。

任何人都可以调查一下并帮助我。

这是我对Login API的XML响应。

[xml_response[1]

这是我的MainActivity代码。任何人都可以建议哪里出了问题。

var regexTest = new Regex(@"'(\d.*\d)@");
-----------------------------^------^----

这是我为XML响应而改造的POJO类。

RequestBody requestBody = RequestBody.create(MediaType.parse("text/xml"), strRequestBody);

    Call<LoginResponseEnvelope> call = RetrofitGenerator.getProductInterfaceApi().Login(requestBody);
    call.enqueue(new Callback<LoginResponseEnvelope>() {
        @Override
        public void onResponse(Call<LoginResponseEnvelope> call, Response<LoginResponseEnvelope> response) {
            progressbar.setVisibility(View.GONE);

            if (response != null) {
                try {
                    Log.d("LoginResponse", "success response :" + response.body());
                    LoginResponseEnvelope loginResponseEnvelope = response.body();
                } catch (Exception e) {
                    e.printStackTrace();
                }

               /* if (loginResponseEnvelope != null) {
                    Log.d("LoginResponse", "success loginResponseEnvelope :" + loginResponseEnvelope.toString());

                    String status = loginResponseEnvelope.getBody().getLoginResponseData().getLoginResult().getLoginInfo().toString();

                    Intent intent = new Intent(MainActivity.this, SuccessActivity.class);
                    startActivity(intent);
                }*/
            }

            /*if (loginResponseEnvelope!=null){

            }*/
        }

        @Override
        public void onFailure(Call<LoginResponseEnvelope> call, Throwable t) {
            progressbar.setVisibility(View.GONE);
            Log.d("LoginResponse", "failure response :" + t.getMessage());
        }
    });

}

1 个答案:

答案 0 :(得分:0)

例如,您有一个XML字符串:

<Response>
    <Field1>string</Field1>
    <Field2>string</Field2>
    <Field3>string</Field3>
    <Field4>string</Field4>
</Response>

首先,添加到您的gradle文件中:

implementation "com.squareup.retrofit2:converter-simplexml:2.6.1" 

接下来,添加到您的retrofit构建器中:

.addConverterFactory(SimpleXmlConverterFactory.create())

注意:SimpleXmlConverterFactory已过时,但我找不到更好的解决方案

和您的模型课:

@Root(name = "Response")
data class Response @JvmOverloads constructor(
@field:Element(name = "Field1")
var bucket: String = "",
@field:Element(name = "Field2")
var key: String = "",
@field:Element(name = "Field3")
var etag: String = "",
@field:Element(name = "Field4")
var location: String = ""
)

注意:属性需要预先定义

您的ApiService文件将与您解析json相同