您好,我是android编程的新手,我通过一些链接了解如何使用改型来解析XML响应,并且我尝试使用以下XML,如图所示。
在POJO类中是否有任何必要的更改。但正在Logcat中收到NullPointer异常。在尝试读取回复时。
任何人都可以调查一下并帮助我。
这是我对Login API的XML响应。
[
这是我的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());
}
});
}
答案 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相同