【问题标题】:Is there a way to know what is volley going to parse?有没有办法知道凌空要解析什么?
【发布时间】:2019-05-31 17:41:43
【问题描述】:

我使用此代码向服务器发出请求,它通常可以正常工作,但有时会抛出一些错误,因为它正在开发中,但是如果它抛出错误,volley 会尝试将其解析为 JsonObject 并且不可避免地会失败。

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (Request.Method.POST, baseUrl, postparams, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.w("Response", response.toString());
                        callBackActivity.JsonCallback(response, "grupos");
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        callBackActivity.ErrorCallback(error, "grupos");

                    }
                });

那么在将其解析为 JsonObject 之前,有什么方法可以知道服务器的原始响应是什么?

【问题讨论】:

  • 您可以切换到 Retrofit 并使用 HttpLoggingInterceptor library 这将记录每个请求和响应、它们的时间和标头。或者如果 Volley 也使用 OkHttp (IDK),则无需切换任何内容,只需将其添加到 OkHttp
  • 会检查一下,感谢您的建议。
  • 发生错误时您将什么 http 响应发送回 android 客户端? volley 的错误监听器应该在任何类型的错误时被调用。

标签: android http-post android-volley


【解决方案1】:

而不是JSONObjecRequest 尝试StringRequest,它将以字符串形式给出响应。记录此响应并查看导致错误的原因,然后您可以将其恢复为 JSONObjectRequest

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.v(response)
        try {
                JSONObject object = new JSONObject(response);       
            }
            } catch (Exception e) {
                Log.v("exception is " + e.toString());
            }        }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        //error log
    }
});

【讨论】:

  • 感谢您的替代方案,但我目前正在寻找一种适用于两种情况、错误和成功连接的选项。
  • 您也可以用于成功案例...您可以将响应转换为JSONObject 并使用JSONObject ....我在我的项目中也这样做
  • 啊,所以 stringrequest 同时接受 jsons 和纯文本,如果在响应中我尝试转换它并且它失败了,那么我可以检查响应是什么,对吧?
  • 没错...我已经更新了答案供您参考
  • 是的,结果应该很好,感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 2021-11-14
  • 2023-03-08
  • 2019-10-25
  • 2011-12-10
  • 2012-04-12
  • 2022-10-24
  • 2010-12-24
相关资源
最近更新 更多