【问题标题】:Gson/Volley Android get messages rather than data from responseGson/Volley Android 从响应中获取消息而不是数据
【发布时间】:2019-02-23 17:53:27
【问题描述】:

我正在向 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 表中创建本地领域数据库行时,我收到错误消息。这是因为GSON 响应正在寻找“数据”部分。但我需要它来查找消息部分。

我怎样才能做到这一点?

【问题讨论】:

    标签: java android realm android-volley gson


    【解决方案1】:

    此行是访问 data 值的位置:

    realm.copyToRealm(changeModelVersionResponse.data);
    

    如果您的 ChangeModelVersionResponse 类型已经包含 messages 字段,您可以将其更新为类似(确切的语法可能略有不同,具体取决于 Realm API):

    realm.copyToRealm(changeModelVersionResponse.messages);
    

    如果您的 ChangeModelVersionResponse 类型尚未包含 messages 字段,则需要先添加该字段(并创建它所依赖的任何类),然后才能更新上面的行。

    【讨论】:

    • 正如你的回答,我完全意识到,愚蠢的错误。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多