Gson/Volley Android 从响应中获取消息而不是数据
Gson/Volley Android get messages rather than data from response
我正在向 api 端点发出请求,当它失败时将在响应的消息部分中提供信息,如下所示:
{
"data":[],
"messages":{
"payment_required":{
"amount":"265.00"
}
},
"code":"",
"status":"failed",
"status_code":400
}
在 android 应用程序上,我正在处理 JsonObjectRequest
,如下所示:
JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Request.Method.PUT, url, data,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
changeColourInterface.requestSuccess();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
NetworkResponse networkResponse = error.networkResponse;
if (networkResponse != null && networkResponse.data != null) {
String jsonError = new String(networkResponse.data);
Log.v("ChangeColour", jsonError);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
ChangeModelVersionResponse changeModelVersionResponse = gson.fromJson(jsonError, ChangeModelVersionResponse.class);
realm.beginTransaction();
realm.copyToRealm(changeModelVersionResponse.data);
realm.commitTransaction();
changeColourInterface.requestFailed(changeModelVersionResponse.data);
}
}
});
queue.add(jsonObjRequest);
我进入了 onErrorResponse
部分,但是当我尝试在 ChangeModelVersion table 中创建本地领域数据库行时,出现错误。这是因为 GSON
响应正在寻找 "data" 部分。但我需要它来查找消息部分。
我怎样才能做到这一点?
此行是访问 data
值的位置:
realm.copyToRealm(changeModelVersionResponse.data);
如果您的 ChangeModelVersionResponse
类型已经包含一个 messages
字段,您可以将其更新为类似的内容(确切的语法可能略有不同,具体取决于 Realm API):
realm.copyToRealm(changeModelVersionResponse.messages);
如果您的 ChangeModelVersionResponse
类型尚未包含 messages
字段,您需要添加该字段(并创建它所依赖的任何 类)才能更新上面那行。
我正在向 api 端点发出请求,当它失败时将在响应的消息部分中提供信息,如下所示:
{
"data":[],
"messages":{
"payment_required":{
"amount":"265.00"
}
},
"code":"",
"status":"failed",
"status_code":400
}
在 android 应用程序上,我正在处理 JsonObjectRequest
,如下所示:
JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Request.Method.PUT, url, data,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
changeColourInterface.requestSuccess();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
NetworkResponse networkResponse = error.networkResponse;
if (networkResponse != null && networkResponse.data != null) {
String jsonError = new String(networkResponse.data);
Log.v("ChangeColour", jsonError);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
ChangeModelVersionResponse changeModelVersionResponse = gson.fromJson(jsonError, ChangeModelVersionResponse.class);
realm.beginTransaction();
realm.copyToRealm(changeModelVersionResponse.data);
realm.commitTransaction();
changeColourInterface.requestFailed(changeModelVersionResponse.data);
}
}
});
queue.add(jsonObjRequest);
我进入了 onErrorResponse
部分,但是当我尝试在 ChangeModelVersion table 中创建本地领域数据库行时,出现错误。这是因为 GSON
响应正在寻找 "data" 部分。但我需要它来查找消息部分。
我怎样才能做到这一点?
此行是访问 data
值的位置:
realm.copyToRealm(changeModelVersionResponse.data);
如果您的 ChangeModelVersionResponse
类型已经包含一个 messages
字段,您可以将其更新为类似的内容(确切的语法可能略有不同,具体取决于 Realm API):
realm.copyToRealm(changeModelVersionResponse.messages);
如果您的 ChangeModelVersionResponse
类型尚未包含 messages
字段,您需要添加该字段(并创建它所依赖的任何 类)才能更新上面那行。