Android Volley BasicNetwork.performRequest()意外响应代码404

时间:2016-09-15 07:39:08

标签: android json android-volley

我在使用排球库发出网络请求时收到此错误,我已经关注了这些链接Android Volley - BasicNetwork.performRequest: Unexpected response code 400Unexpected response code 404 volley,但这些链接都不适用于我的情况。这是我的请求代码

 StringRequest stringRequest = new StringRequest(Request.Method.POST,AppConstants.LOG_IN_API , new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("TAG", "Login Response: " + response.toString());
                try {
                    JSONObject jsonObject = new JSONObject(response);
                   Log.v("USerid",""+jsonObject.getInt("userid"));

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

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                System.out.println("volley Error ................."+volleyError);
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
               Log.v("getparams","Is called");
                Map<String, String> params = new HashMap<String, String>();
                params.put(AppConstants.USER_ID, "info@mindtears.com");
                params.put(AppConstants.PASSWORD, "123456");
                return params;
            }


            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();

                headers.put("Content-Type", "application/json; charset=utf-8");
                return headers;
            }

        };

        Log.v("Request",""+stringRequest);

        AppController.getInstance().addToRequestQueue(stringRequest);

    }

有没有人可以告诉我我的代码在哪里做错了?任何帮助都很明显。

8 个答案:

答案 0 :(得分:5)

通常,此响应是由URL发送错误参数引起的。请检查每个参数是否有拼写,并确保是否在字符串或对象中获得响应。还要检查Content-type。

希望这会对你有所帮助。
谢谢。

答案 1 :(得分:4)

如果GET正在运行而POST没有,并且您得到404响应,则表示您的发布请求无法由服务器路由。 我有同样的问题,解决方案很简单。我已经在NodeJS中创建了我的服务器,并且我没有为我的URL处理POST操作。我用get测试它,一切都很好。

我在使用Express的节点服务器上的测试方法是:

app.get('/data/helloWorld', routeData.helloWorld);

当然我应该为post方法添加路线

app.post('/data/helloWorld', routeData.helloWorld);

答案 2 :(得分:1)

删除getHeaders()解决了我的问题。

答案 3 :(得分:0)

使用此代码尝试使用api并检查响应。

 StringRequest stringRequest = new StringRequest(Request.Method.POST, ApiURL.LOGIN_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.e("Response", response); 
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Response", error.toString());
                }
            }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("email", email.getText().toString());
            params.put("password", password.getText().toString());
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/x-www-form-urlencoded");
            return params;
        }
    };

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

}

答案 4 :(得分:0)

stringRequest中的本地IP可能有误,请检查。我通过更改IP解决了我的问题。

我的IP地址是:

private static final String ROOT_URL="http://192.168.0.101/Android/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";

在哪里,后来我发现,通过将此IP粘贴到模拟器和浏览器中,它无法正常工作。我被这个问题困扰了一天。然后,我从IP中删除了根文件夹“ Android ”并对其进行了工作。

所以我的IP现在是:(已删除字符串中的Android文件夹)

private static final String ROOT_URL="http://192.168.0.101/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";

请记住,该IP必须同时在浏览器和仿真器中运行。如果是这样,则在您的项目中使用该IP。

答案 5 :(得分:0)

将POST更改为GET方法,这对我有用:

StringRequest stringRequest = new StringRequest(Request.Method.GET,AppConstants.LOG_IN_API , new Response.Listener<String>() {

答案 6 :(得分:0)

就我而言,一切正常,但API会返回404响应。请检查邮递员。

PostMan

答案 7 :(得分:-1)

我错误地提出了GET请求而不是POST,我改变了它,这解决了我的404响应问题。