这个结果是由web服务发送的,我尝试用简单的类解析它,就像结果结构一样,
{
"result":
[
{
"id": "386434",
"weight": "72.000",
"type": "xxxxx",
"shamsi_date": "1395/8/5",
"date": "2016-10-26 10:52:47"
},
{
"id": "395118",
"weight": "70.000",
"type": "xxxx",
"shamsi_date": "1395/8/19",
"date": "2016-11-09 10:58:29"
}
],
"message": ""
}
你可以看到result
是JsonArray,我希望得到它并放到JSONARRAY
,然后我尝试从中获取JSONObject
。
private void getUserAllVisits(String userId) {
UserAllVisits userAllVisits = new UserAllVisits();
userAllVisits.setUserId(userId);
Call<UserAllVisits> call = myService.getUserAllVisitsCall(userAllVisits);
call.enqueue(new Callback<UserAllVisits>() {
@Override
public void onResponse(Call<UserAllVisits> call, final Response<UserAllVisits> response) {
if (response.isSuccessful()) {
JSONArray jsonArray = new JSONArray(Arrays.asList(response.body().getResult()));
}
}
@Override
public void onFailure(Call<UserAllVisits> call, Throwable t) {
Log.e("Err: ", t.getMessage());
}
});
}
在我的代码response.body().getResult().length;
中返回2
,我可以使用result
获取response.body().getResult();
数组,但我无法将简单变量定义为JSONArray
并指定变为:
JSONArray jsonArray = new JSONArray(response.body().getResult());
答案 0 :(得分:2)
使用ResponseBody而不是Pojo类。试试这个:
Call<ResponseBody> call = behandamService.getUserAllVisitsCall(userAllVisits);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {
if (response.isSuccessful()) {
//handle Exceptions here
String jsonString = response.body().string();
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonarray = jsonObject.getJSONArray("result");
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("Err: ", t.getMessage());
}
});
,你的界面应该是这样的
@POST // or GET method as per your requirement
Call<ResponseBody> getUserAllVisitsCall(@Body UserAllVisits userAllVisits);
答案 1 :(得分:0)
如果您只想要Retrofit
返回的原始字符串,那么您不必使用Retrofit
。 Retrofit
背后的点是使用GSON转换器解析JSON
。如果你不希望你可以使用简单的HttpUrlConnection
。
这就是你问题的答案。您可以使用onResponse
从response.body().string()
获取原始字符串。
方法1
JSONObject jsonData = new JSONObject(response.raw().body().string());
JSONArray resultArray = jsonData.getJSONArray("result");
方法2
如果您的GSON库已经在项目中,
JSONArray resultArray = (JSONArray) new Gson().toJson(response.body().getResult());
答案 2 :(得分:0)
你可以使用Pojo类来创建响应的响应吗? `onResponse(){ UserAllVisits userAllVisits = response.body(); ResultClass result = userAllVisits.getResult();
}`