我一直在使用排球库来使用我的Android应用程序来消费服务。我注意到一些奇怪的东西,当我尝试将json对象发布到服务器时,我必须创建一个JSONObject类型的响应侦听器。但是我的服务器返回String,Success或failure。是否可以编写一个等待String响应的JsonObjectRequest?这就是我所写的。该服务正确运行,但由于无法将String转换为JSON,因此在成功发布后触发onErrorResponse
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(StartingActivity.this,response.toString(),Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(StartingActivity.this,"That didn't work",Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(jsonRequest);
答案 0 :(得分:0)
您发送到服务器的jsonBody应该是String。
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody.toString(),
我希望这会对你有所帮助。谢谢!
答案 1 :(得分:0)
使用StringRequest而不是JsonObjectRequest。它会在字符串中返回响应像这样:
StringRequest stringRequest = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e(TAG,response);
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}) {
@Override
public byte[] getBody() throws AuthFailureError {
//use this to post data.
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
//use this for headers.
}
};
stringRequest.setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 50000;
}
@Override
public int getCurrentRetryCount() {
return 50000;
}
@Override
public void retry(VolleyError error) throws VolleyError {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(stringRequest);