凌空中的 JSONRequest 和 StringRequest 有啥区别

Posted

技术标签:

【中文标题】凌空中的 JSONRequest 和 StringRequest 有啥区别【英文标题】:What is the difference between JSONRequest and StringRequest in volley凌空中的 JSONRequest 和 StringRequest 有什么区别 【发布时间】:2018-01-14 13:28:02 【问题描述】:

我一直读到数据来自 json 格式的服务器,当我们想以 json 格式发送一些我们发送到服务器的数据时,数据以 json 格式传输,那么字符串请求来自哪里?我不知道我们是否也可以以字符串格式发布和获取数据,使用字符串和json请求有什么区别和用例?

谢谢!

【问题讨论】:

***.com/questions/32420158/… 不幸的是它没有帮助 JSONRequest 将结果作为 JSONObject 返回。 StringRequest 以字符串形式返回结果(字符串上的 json 结构) 所以整个 json 响应以字符串格式返回? 如果您希望响应是 JSON 对象或 JSON 数组,节省实现序列化的时间并且您不想显式设置内容类型,那么 JsonObjectRequestJsonArrayRequest 是您需要的正确工具。但是,如果它是一种不同的格式,或者您只是想使用其他一些序列化/反序列化工具,例如 GSON,那么 StringRequest 是通用的工具。到目前为止,Volley 还缺少 ByteRequest 【参考方案1】:

StringRequest 类将用于获取任何类型的字符串数据。这 响应可以是 json、xml、html、文本。

 // Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
            new Response.Listener<String>() 
    @Override
    public void onResponse(String response) 
        // Display the first 500 characters of the response string.

    
, new Response.ErrorListener() 
    @Override
    public void onErrorResponse(VolleyError error) 

    
);

如果您期望响应中包含 json 对象,则应使用 JsonObjectRequest .

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
            URL, null,
            new Response.Listener<JSONObject>() 

                @Override
                public void onResponse(JSONObject response) 
                    Log.d(TAG, response.toString());

                
            , new Response.ErrorListener() 

                @Override
                public void onErrorResponse(VolleyError error) 

                
            );

【讨论】:

使用字符串请求有什么好处,因为返回的数据仍然是json格式,我们必须解析才能得到字符串,为什么要特定字符串请求 这个“StringRequest 类将用于获取任何类型的字符串数据”你的意思是如果服务器上有数据,例如数字、url 等,但字符串请求只会返回字符串数据? @blackHawk 还有疑问吗?? @blackHawk 你的第一个问题阅读***.com/a/32420284/3395198 不,它很有趣@IntelliJ【参考方案2】:

关于请求的返回类型,StringRequest 处理 String 作为响应,如 error = falseJSONObjectRequest 处理 JSONObject 响应,如 "error" : false,如何知道它是 JSONObject?使用括号 ()。

【讨论】:

这意味着响应仍在 json 中,但在字符串请求中仅更改了格式?类似于将 json 转换为字符串格式的中间件? 不,StringRequest的响应是String,服务器返回String,对于JSONObject,服务器返回JSON响应 也就是说服务器也可以返回字符串格式的数据和json对象? 我只知道服务器只返回json格式的数据 服务器只能返回一种类型的数据(Json, xml, String ...)

以上是关于凌空中的 JSONRequest 和 StringRequest 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

无法在 ftl 文件中映射 jsonRequest 属性

使用凌空json数据的片段中的Recyclerview?

解决Volley中的JsonObjectRequest jsonRequest参数无法被服务端读取的问题

我没有收到凌空的回应

凌空请求的匿名侦听器导致内存泄漏

JSONRequest 的 AFNetworking 问题