我正在开发一个与我编写的RESTful Web服务通信的Android应用。使用Volley
forGET
方法很棒而且很容易,但是我不能指望这些POST
方法。
我想送POST
一个请求,String
在请求主体和检索Web服务(如的原始响应200 ok
,500 server error
)。
我所能找到的是StringRequest
不允许与数据一起发送的消息(正文),并且它使我无法接收已解析的String
响应。我还遇到了JsonObjectRequest
接受数据(正文)但检索已解析的JSONObject
响应的情况。
我决定编写自己的实现,但是找不到从Web服务接收原始响应的方法。我该怎么做?
您可以参考以下代码(当然您可以自定义以获取网络响应的更多详细信息):
try {
RequestQueue requestQueue = Volley.newRequestQueue(this);
String URL = "http://...";
JSONObject jsonBody = new JSONObject();
jsonBody.put("Title", "Android Volley Demo");
jsonBody.put("Author", "BNK");
final String requestBody = jsonBody.toString();
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("VOLLEY", response);
}
}, 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 requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
return null;
}
}
@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));
}
};
requestQueue.add(stringRequest);
} catch (JSONException e) {
e.printStackTrace();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句