Java Gson/Volley Android从响应中获取消息而不是数据
我正在向api端点发出请求,请求失败时将在响应的消息部分提供信息,如下所示:Java Gson/Volley Android从响应中获取消息而不是数据,java,android,realm,android-volley,gson,Java,Android,Realm,Android Volley,Gson,我正在向api端点发出请求,请求失败时将在响应的消息部分提供信息,如下所示: { "data":[], "messages":{ "payment_required":{ "amount":"265.00" } }, "code":"", "status":"failed", "status_code":400 } JsonObjectRequest jsonObjReque
{
"data":[],
"messages":{
"payment_required":{
"amount":"265.00"
}
},
"code":"",
"status":"failed",
"status_code":400
}
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);
在android应用程序上,我正在处理JsonObjectRequest
,如下所示:
{
"data":[],
"messages":{
"payment_required":{
"amount":"265.00"
}
},
"code":"",
"status":"failed",
"status_code":400
}
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);
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.PUT、url、数据、,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
ChangeColorInterface.requestSuccess();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
NetworkResponse NetworkResponse=error.NetworkResponse;
if(networkResponse!=null&&networkResponse.data!=null){
String jsonError=新字符串(networkResponse.data);
Log.v(“变色”,jsonError);
Gson Gson=new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_,带下划线)
.create();
ChangeModelVersionResponse ChangeModelVersionResponse=gson.fromJson(jsonError,ChangeModelVersionResponse.class);
realm.beginTransaction();
realm.copyToRealm(changeModelVersionResponse.data);
realm.commitTransaction();
changeColourInterface.requestFailed(changeModelVersionResponse.data);
}
}
});
add(jsonObjRequest);
我进入了onErrorResponse
部分,但是当我试图在ChangeModelVersion表中创建一个本地域db行时,我得到了一个错误。这是因为GSON
响应正在查找“数据”部分。但我需要它来查找信息部分
如何实现这一点?此行是访问
数据
值的地方:
realm.copyToRealm(changeModelVersionResponse.data);
如果您的ChangeModelVersionResponse
类型已包含messages
字段,则可以将其更新为类似的内容(具体语法可能略有不同,具体取决于领域API):
realm.copyToRealm(changeModelVersionResponse.messages);
如果您的
ChangeModelVersionResponse
类型尚未包含messages
字段,则需要添加该字段(并创建它所依赖的任何类),然后才能更新上面的行。正如您回答的那样,我完全意识到,这是一个愚蠢的错误。无论如何谢谢你!