如何查看JsonObjectRequest的网络响应?附相关请求代码
如何查看JsonObjectRequest的网络响应?
我来给你几种实用的方法,帮你轻松查看Volley中JsonObjectRequest的网络响应,从基础的响应内容打印到完整的请求/响应信息都覆盖到了:
方法1:在onResponse中直接打印响应内容
这是最直接的方式,你可以在收到响应的回调里直接打印整个JSONObject,快速查看返回的数据:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // 打印原始JSON响应 Log.d("NetworkResponse", "原始响应内容: " + response.toString()); // 你的原有业务逻辑 ArrayList<String> empresas = new ArrayList<String>(); for (Iterator<String> it = response.keys(); it.hasNext(); ) { String key = it.next(); try { String empresa = (String) response.get(key); empresas.add(empresa); empresasMap.put(key, empresa); } catch (JSONException e) { e.printStackTrace(); // 解析出错时也可以打印响应,方便排查问题 Log.e("JSONParseError", "解析key[" + key + "]失败,响应内容:" + response.toString()); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 别忘了处理错误响应!如果有错误返回,也可以查看错误体 if (error.networkResponse != null) { try { String errorBody = new String(error.networkResponse.data, "UTF-8"); Log.e("VolleyError", "错误响应体: " + errorBody); Log.e("VolleyError", "错误状态码: " + error.networkResponse.statusCode); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } error.printStackTrace(); } });
方法2:格式化JSON响应,让内容更易读
如果返回的JSON结构复杂,直接打印toString()会显得杂乱,用Gson格式化后会更清晰:
- 先添加Gson依赖(如果还没加),在你的
build.gradle(Module level)中添加:
implementation 'com.google.code.gson:gson:2.10.1' // 可以使用最新版本
- 在
onResponse中格式化并打印:
@Override public void onResponse(JSONObject response) { // 格式化JSON响应 Gson gson = new GsonBuilder().setPrettyPrinting().create(); String formattedResponse = gson.toJson(response); Log.d("NetworkResponse", "格式化后的响应:\n" + formattedResponse); // 你的原有逻辑... }
方法3:查看完整的网络响应(包括响应头、状态码)
如果需要查看更底层的网络信息(比如响应头、原始字节转成的字符串),可以重写JsonObjectRequest的parseNetworkResponse方法:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, // 你的Listener和ErrorListener... ) { @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { // 打印完整的网络响应信息 Log.d("FullResponse", "响应状态码: " + response.statusCode); Log.d("FullResponse", "响应头信息: " + response.headers.toString()); try { String rawResponseBody = new String(response.data, "UTF-8"); Log.d("FullResponse", "原始响应体:\n" + rawResponseBody); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 调用父类方法继续解析 return super.parseNetworkResponse(response); } };
这样不管是正常响应还是错误响应,你都能全面掌握网络请求的细节,方便调试和排查问题。
内容的提问来源于stack exchange,提问作者Ericson Willians
相关产品推荐
相关产品推荐

