Обрабатывать нулевое исключение в RecyclerView из PHP URL - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь обработать это нулевое исключение в RecyclerView из PHP URL. Я хочу, чтобы он отображал сообщение Toast, если возникает исключение NULL: No Result Found.

нулевое исключение:

null exception

код

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {

        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray array = jsonObject.getJSONArray(uarray);
            for (int i = 0; i < array.length(); i++) {
                JSONObject p = array.getJSONObject(i);
                Category_Movie item = new Category_Movie(
                    p.getInt("id"), 
                    p.getString("mTitle"), 
                    p.getString("mDesc"), 
                    p.getInt("mYear"), 
                );
                listItems.add(item);
            }
            mAdapter = new CategoryListAll_Adapter(listItems, getActivity());
            recyclerView.setAdapter(mAdapter);

        } catch(JSONException e) {
            e.printStackTrace();
        }
    }
},

new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show();
    }
});

RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);

Ответы [ 2 ]

1 голос
/ 28 марта 2019

EDIT

Создайте один метод для проверки вашего JSONObject

public boolean isJSONValid(String jsonStr) {
    try {
        new JSONObject(jsonStr);
    } catch (JSONException ex) {
        return false;
    }
    return true;
}

Попробуйте отредактировать следующий код:

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if (isJSONValid(response)) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    JSONArray array = jsonObject.getJSONArray(uarray);
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject p = array.getJSONObject(i);
                        Category_Movie item = new Category_Movie(
                                p.getInt("id"),
                                p.getString("mTitle"),
                                p.getString("mDesc"),
                                p.getInt("mYear"),
                                );
                        listItems.add(item);
                    }
                    mAdapter = new CategoryListAll_Adapter(listItems, getActivity());
                    recyclerView.setAdapter(mAdapter);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                // your Toast Message
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show();
        }
    });

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(stringRequest);
0 голосов
/ 28 марта 2019

Возвращение к раннему обычному - это путь ...

, поэтому я бы сравнил с известным String значением null, в случае отсутствия результатов,

перед проверкойесли это может быть допустимым JSON (который уже может быть исключен):

if(! response.equals("null")) {
   try ...
}

или улучшить оператор e.printStackTrace() и обработать это JSONException соответственно:

try {
    ...
} catch(JSONException e) {
    if(response.equals("null")) {
        /* assume no results */
    } else {
        e.printStackTrace();
    }
}

Имея доступ к коду PHP ... лучше всегда возвращать анализируемый JSON ответ:

header("Content-Type: application/json");
die(json_encode((object) array(
    "success" => false,
    "error" => "no results"
)));

... когдаклиент ожидает application/json вместо text/plain.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...