我在使用排球库发出网络请求时收到此错误,我已经关注了这些链接Android Volley - BasicNetwork.performRequest: Unexpected response code 400和Unexpected 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);
}
有没有人可以告诉我我的代码在哪里做错了?任何帮助都很明显。
答案 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)
答案 7 :(得分:-1)
我错误地提出了GET请求而不是POST,我改变了它,这解决了我的404响应问题。