use*_*017 38 android android-volley
我想用表单urlencoded参数创建一个POST JSONObjectRequest.我怎样才能做到这一点?我试过以下代码,但无济于事.
final String api = "http://api.url";
final JSONObject jobj = new JSONObject();
jobj.put("Username", "usr");
jobj.put("Password", "passwd");
jobj.put("grant_type", "password");
final JsonObjectRequest jor = new JsonObjectRequest(
Request.Method.POST,
api, jobj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG).show();
//do other things with the received JSONObject
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> pars = new HashMap<String, String>();
pars.put("Content-Type", "application/x-www-form-urlencoded");
return pars;
}
};
//add to the request queue
requestqueue.AddToRequestQueue(jor);
Run Code Online (Sandbox Code Playgroud)
api通话我收到了400个不良请求!我该如何解决?
Bal*_*hnu 77
经过漫长的长期斗争,找到了解决方案.你需要覆盖getBodyContentType()并返回application/x-www-form-urlencoded; charset=UTF-8.
StringRequest jsonObjRequest = new StringRequest(
Request.Method.POST,
getResources().getString(R.string.base_url),
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
MyFunctions.toastShort(LoginActivity.this, response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("volley", "Error: " + error.getMessage());
error.printStackTrace();
MyFunctions.croutonAlert(LoginActivity.this,
MyFunctions.parseVolleyError(error));
loading.setVisibility(View.GONE);
}
}) {
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("username", etUname.getText().toString().trim());
params.put("password", etPass.getText().toString().trim());
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjRequest);
Run Code Online (Sandbox Code Playgroud)
小智 9
public static void DoPostStringResult(String url, Object Tag,
final StringCallBack CallBack, Context context,
final String body) {
StringRequest request = new StringRequest(Request.Method.POST, url,
new Listener<String>() {
@Override
public void onResponse(String result) {
CallBack.getResult(result);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
CallBack.getError(error);
}
}) {
// @Override
// public Map<String, String> getHeaders() throws AuthFailureError {
// //?????
// Map<String, String> map = new HashMap<String, String>();
// map.put("Content-Type", "application/x-www-form-urldecoded");
// return map;
// }
@Override
public byte[] getBody() throws AuthFailureError {
// TODO Auto-generated method stub
return body.getBytes();
}
@Override
public String getBodyContentType() {
// TODO Auto-generated method stub
return "application/x-www-form-urlencoded";
}
/**
* ??Volley?????????????
*/
@Override
protected String getParamsEncoding() {
return "utf-8";
}
};
request.setRetryPolicy(new DefaultRetryPolicy(30 * 1000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
request.setTag(Tag);
VolleyUtils.getRequestQueue(context).add(request);
}
Run Code Online (Sandbox Code Playgroud)
你的身体必须是这样的"username=aa&password=bb&email=XXX@XXX.com"
尝试使用StringRequest类似下面的代码:
final String api = "http://api.url";
final StringRequest stringReq = new StringRequest(Request.Method.POST, api, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG).show();
//do other things with the received JSONObject
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> pars = new HashMap<String, String>();
pars.put("Content-Type", "application/x-www-form-urlencoded");
return pars;
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
Map<String, String> pars = new HashMap<String, String>();
pars.put("Username", "usr");
pars.put("Password", "passwd");
pars.put("grant_type", "password");
return pars;
}
};
//add to the request queue
requestqueue.AddToRequestQueue(stringReq);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34686 次 |
| 最近记录: |