首页 > 解决方案 > 使用 volley 时出现空指针异常

问题描述

我正在使用 volley 从数据库中获取数据。我总是收到空指针错误。我不知道错误是什么。它总是执行 onErrorResponse() (error.null) 并在我的 logcat 中显示

BasicNetwork.performRequest:意外响应代码 301

这是我从 php 文件中获取数据的 java 方法。

 private void fetchChatThread() {

    StringRequest strReq = new StringRequest(Request.Method.POST,
            EndPoints.chatMessages, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            try {
                JSONObject obj = new JSONObject(response);

                Load_datato_list load_data_tolist = new Load_datato_list();
                load_data_tolist.execute(obj);

            } catch (JSONException e) {
                Log.e(TAG, "json parsing error: " + e.getMessage());
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Messages messages=new Messages();
            error.printStackTrace();
            NetworkResponse networkResponse = error.networkResponse;
            Log.e(TAG, " Try Again  fetch error" + networkResponse);
            Toast.makeText(Chat_Rooms.this, messages.getSender_id(), Toast.LENGTH_SHORT).show();

        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> myparams = new HashMap<String, String>();

            try {
          myparams.put("sender_userid", sender_userid);
         myparams.put("reciver_id", String_username.reciver_user_id);
            } catch (Exception e) {

                e.printStackTrace();
            }
            Log.e(TAG, "Params: " + myparams.toString());
            return myparams;
        }
    };
    //Adding request to request queue
    addToRequestQueue(strReq);
}

这是我的私人将数据从 php 加载到对象

 private class Load_datato_list extends AsyncTask<JSONObject, Void, ArrayList<Messages>> {


    @Override
    protected ArrayList<Messages> doInBackground(JSONObject[] params) {

        JSONObject obj = params[0];
        try {
            JSONArray commentsObj = obj.getJSONArray("messages");

            for (int i = 0; i < commentsObj.length(); i++) {
                JSONObject commentObj = (JSONObject) commentsObj.get(i);

                String commentId = commentObj.getString("id");
                String commentText = commentObj.getString("message");
                String createddate = commentObj.getString("date");
                String commentuser_id = commentObj.getString("user_id_fk");
                URL url;
                Bitmap image, image1;
                try {
                    url = new URL(Base_URL.BASE_URL_IMAGES + "user_profile_pictures" + commentuser_id + ".jpg");
                    image1 = BitmapFactory.decodeStream(url.openStream());
                    image = getResizedBitmap(image1, 50);
                } catch (Exception e) {
                    image = null;


                    e.printStackTrace();
                }

                Users user;

                user = new Users(commentuser_id, String_username.user_name, image);

                Messages message = new Messages();
                message.setId(commentId);
                message.setMessage(commentText);
                message.setCreatedAt(createddate);
                message.setSender_id(commentuser_id);
                message.setUser(user);
                messageArrayList.add(message);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return messageArrayList;
    }

    @Override
    protected void onPostExecute(ArrayList<Messages> messageArrayList) {
        Collections.reverse(messageArrayList);

        chatroom_adapter.notifyDataSetChanged();
        if (chatroom_adapter.getItemCount() > 1) {
            rec_chatBubble.getLayoutManager().smoothScrollToPosition(rec_chatBubble, null, chatroom_adapter.getItemCount() - 1);
        }
    }
}

标签: nullpointerexceptionandroid-volley

解决方案


尝试这个

private void fetchChatThread(final String count) {

    StringRequest strReq = new StringRequest(Request.Method.POST,
            EndPoints.chatMessages, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            try {
                JSONObject obj = new JSONObject(response);
                Log.d("response error", response);

                Load_datato_list load_data_tolist = new Load_datato_list();
                load_data_tolist.execute(obj);



            } catch (JSONException e) {
                Log.e(TAG, "json parsing error: " + e.getMessage());
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Messages messages = new Messages();
            error.printStackTrace();
            NetworkResponse networkResponse = error.networkResponse;
            Log.e(TAG, " Try Again  fetch error" + networkResponse);

        }
    }) {

        @Override
        protected HashMap<String, String> getParams() {
            HashMap<String, String> myparams = new HashMap<String, String>();

            try {
                myparams.put("sender_userid", sender_userid);
                myparams.put("reciver_id", String_username.reciver_user_id);
                myparams.put("count", count);
            } catch (Exception e) {

                e.printStackTrace();
            }
            Log.e(TAG, "Params: " + myparams.toString());
            return myparams;
        }
    };
    //Adding request to request queueok

    addToRequestQueue(strReq);
}

和这个

private class Load_datato_list extends AsyncTask<JSONObject, Void, ArrayList<Messages>> {


    @Override
    protected ArrayList<Messages> doInBackground(JSONObject[] params) {
        messageArrayList.clear();
        JSONObject obj = params[0];
        try {
            JSONArray commentsObj = obj.getJSONArray("messages");

            for (int i = 0; i < commentsObj.length(); i++) {
                JSONObject commentObj = (JSONObject) commentsObj.get(i);

                String Id = commentObj.getString("id");
                String Text = commentObj.getString("message");
                String date = commentObj.getString("date");
                String yuser_id = commentObj.getString("user_id");


                Messages message = new Messages();
                message.setId(Id);
                message.setMessage(Text);
                message.setCreatedAt(date);
                message.setSender_id(yuser_id);

                messageArrayList.add(message);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return messageArrayList;
    }

推荐阅读