Volley 没有传递 post 参数
Volley doesnt pass post parameters
我在我的 Android 项目中使用 Volley 将其连接到服务器。
我需要使用 post
方法将数据发送到 url 并获得响应,但 volley 没有传递我的数据。
这是我的代码:
StringRequest jsonObjReq = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jres=new JSONObject();
jres.opt(response);
if(jres.getString("value").toLowerCase()=="true"){
ConfirmMob=txtMob.getText().toString();
SubmitMob();
}
else{
AlertDialog.Builder dialog=new AlertDialog.Builder(App.getContext());
dialog.setMessage(R.string.IncorrectMob);
dialog.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
loading.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("IsMobValid - " + error.networkResponse, "Error: " + error.getMessage());
error.printStackTrace();
error.networkResponse
loading.hide();
}
}){
@Override
protected Map<String,String> getParams()throws AuthFailureError{
Map<String,String> params = new HashMap<String, String>();
params.put("x", "IsMobValid");
params.put("Mob", txtMob.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;
}
};
App.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
我怎样才能让它正常工作?
有没有错?
我认为截击有缺陷!
在 JsonObjectRequest
的请求中根本没有传递参数。
在 StringRequest
请求中,如果发送自定义 headaer ,听起来 HTTPRequest 不正常。因为我的服务器导致 500 Error
!
通过删除以下代码,我的问题已解决。
@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;
}
JSON 个请求都失败了,因为在服务器端,所有 POST 个参数都是空的!我的带有 Express 的 node.js 服务器正在使用 express.bodyparser(),它以前在本地运行得很好。
同样奇怪的是 header 工作正常。
经过大量搜索,并在 Volley 用户组中寻求帮助后,我发现了一个提示,可以在内容类型 header 上设置字符集。因为没有它,bodyparser 无法正确解析该参数。
所以,正确的 content-type headers 应该是:
application/json; charset=utf-8
并且正确的content-type header设置在第25行:
Map<String, String> jsonParams = new HashMap<String, String>();
jsonParams.put("param1", youParameter);
JsonObjectRequest myRequest = new JsonObjectRequest(
Request.Method.POST,
"https://your.url/here",
new JSONObject(jsonParams),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
verificationSuccess(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
verificationFailed(error);
}
}) {
@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");
headers.put("User-agent", "My useragent");
return headers;
}
};
MyApplication.getInstance().addToRequestQueue(myRequest, "tag");
我在我的 Android 项目中使用 Volley 将其连接到服务器。
我需要使用 post
方法将数据发送到 url 并获得响应,但 volley 没有传递我的数据。
这是我的代码:
StringRequest jsonObjReq = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jres=new JSONObject();
jres.opt(response);
if(jres.getString("value").toLowerCase()=="true"){
ConfirmMob=txtMob.getText().toString();
SubmitMob();
}
else{
AlertDialog.Builder dialog=new AlertDialog.Builder(App.getContext());
dialog.setMessage(R.string.IncorrectMob);
dialog.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
loading.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("IsMobValid - " + error.networkResponse, "Error: " + error.getMessage());
error.printStackTrace();
error.networkResponse
loading.hide();
}
}){
@Override
protected Map<String,String> getParams()throws AuthFailureError{
Map<String,String> params = new HashMap<String, String>();
params.put("x", "IsMobValid");
params.put("Mob", txtMob.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;
}
};
App.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
我怎样才能让它正常工作? 有没有错?
我认为截击有缺陷!
在 JsonObjectRequest
的请求中根本没有传递参数。
在 StringRequest
请求中,如果发送自定义 headaer ,听起来 HTTPRequest 不正常。因为我的服务器导致 500 Error
!
通过删除以下代码,我的问题已解决。
@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;
}
JSON 个请求都失败了,因为在服务器端,所有 POST 个参数都是空的!我的带有 Express 的 node.js 服务器正在使用 express.bodyparser(),它以前在本地运行得很好。 同样奇怪的是 header 工作正常。
经过大量搜索,并在 Volley 用户组中寻求帮助后,我发现了一个提示,可以在内容类型 header 上设置字符集。因为没有它,bodyparser 无法正确解析该参数。 所以,正确的 content-type headers 应该是:
application/json; charset=utf-8
并且正确的content-type header设置在第25行:
Map<String, String> jsonParams = new HashMap<String, String>();
jsonParams.put("param1", youParameter);
JsonObjectRequest myRequest = new JsonObjectRequest(
Request.Method.POST,
"https://your.url/here",
new JSONObject(jsonParams),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
verificationSuccess(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
verificationFailed(error);
}
}) {
@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");
headers.put("User-agent", "My useragent");
return headers;
}
};
MyApplication.getInstance().addToRequestQueue(myRequest, "tag");