Gson / Volley Android получает сообщения, а не данные из ответа - PullRequest
0 голосов
/ 19 сентября 2018

Я делаю запрос к конечной точке 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 ищет раздел «данные».Но мне нужно, чтобы он искал раздел сообщений.

Как мне этого добиться?

1 Ответ

0 голосов
/ 19 сентября 2018

В этой строке осуществляется доступ к значению data:

realm.copyToRealm(changeModelVersionResponse.data);

Если ваш тип ChangeModelVersionResponse уже содержит поле messages, вы можете обновить его до чего-то вроде (точный синтаксис можетмогут немного отличаться в зависимости от API Realm):

realm.copyToRealm(changeModelVersionResponse.messages);

Если ваш тип ChangeModelVersionResponse еще не содержит поле messages, вам необходимо добавить это поле (и создать любые классы, от которых он зависит), прежде чем вы сможете обновить строку выше.

...