使用 Volley 在正文中发布表单数据参数
Posted
技术标签:
【中文标题】使用 Volley 在正文中发布表单数据参数【英文标题】:Posting form-data Parameters in the body using Volley 【发布时间】:2017-02-04 16:19:58 【问题描述】:这是使用邮递员完成的发布请求
我想得到的回应是:
"result": "success",
"reason":
"first_name": "aswath",
"last_name": "AsH",
"email": "selviragu09@gmail.com",
"phone": "\"8867336754\"",
"authy_id": "26829982",
"updated_at": "2016-09-27 06:38:07",
"created_at": "2016-09-27 06:38:07",
"id": "5012"
,
"sms": "token sent"
这是我要发送的请求:
JSONObject jsonBody = new JSONObject();
jsonBody.put("first_name", firstname);
jsonBody.put("last_name", lastName);
jsonBody.put("email", Email);
jsonBody.put("phone", number);
final String mRequestBody = jsonBody.toString();
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>()
@Override
public void onResponse(String response)
Log.i("VOLLEY", response);
Log.d("**********", "FETCHING IN VOLLEY REQ" + response.toString());
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.e("VOLLEY", error.toString());
)
@Override
public String getBodyContentType()
return "application/json; charset=utf-8";
@Override
public byte[] getBody() throws AuthFailureError
try
return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
catch (UnsupportedEncodingException uee)
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
return null;
@Override
public Map<String, String> getHeaders() throws AuthFailureError
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "multipart/form-data");
return headers;
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
String responseString = "";
if (response != null)
responseString = String.valueOf(response.statusCode);
// can get more details such as response.headers
return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
;
getRequestOtpPage().addToRequestQueue(stringRequest);
但是当我发布请求时它返回错误!
如何解决问题?
【问题讨论】:
尝试实现 getParams() 并传递简单的键值对而不是 json 对象 试过了,收到错误响应。发送的所有数据都是正确的。 去掉getHeaders()方法再试试。 ***.com/questions/39609776/… 试试这个,做一些通用的东西,这将帮助你实现你想要的 查看这个***.com/questions/28344448/… 【参考方案1】:只需尝试以下代码,这将用于使用 volley 发送简单的帖子数据,只需替换 URL 和参数数据。
StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
new Response.Listener<String>()
@Override
public void onResponse(String response)
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
)
@Override
protected Map<String,String> getParams()
Map<String,String> params = new HashMap<String, String>();
params.put(KEY_USERNAME,username);
params.put(KEY_PASSWORD,password);
params.put(KEY_EMAIL, email);
return params;
;
getRequestOtpPage().addToRequestQueue(stringRequest);
【讨论】:
为什么它不能使用 JsonObjectRequest 而是使用 StringRequest? @QadirHussain 我有同样的问题,凌空创作者应该回答这个问题。 如果需要基本身份验证,我将基本身份验证放在哪里? @Override public Map以上是关于使用 Volley 在正文中发布表单数据参数的主要内容,如果未能解决你的问题,请参考以下文章
正文参数不能与表单参数一起使用-带有Headers和json数据的Feign客户端