有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

PHP URL中RecyclerView中的java句柄空异常

我试图从PHP URL在RecyclerView中处理这个空异常。如果出现空异常,我希望它显示Toast消息: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. # 1 楼答案

    编辑

    创建一个方法来验证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);
    
  2. # 2 楼答案

    早早归来是一条路

    因此,在没有结果的情况下,我将与已知的Stringnull进行比较

    在检查它是否可能有效之前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