为什么Volley响应被接收为“ [”而不是JSON

时间:2019-05-29 18:02:11

标签: android android-volley http-get

我正在学习Volley,但不知道为什么GET方法的响应会以单个字符的形式出现-> [

我正在使用此方法获取JSON响应:

    public void getJsonMethod() {
    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(context);
    // String url = "https://www.w3schools.com/js/myTutorials.txt";
    String url = "http://www.google.com"; // with this url I am getting response

    // Request a string response from the provided URL.
    final StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    System.out.println("Response is: " + response);
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            System.out.println("Response is not good" + error.getMessage());
        }
    });
    // Add the request to the RequestQueue.
    queue.add(stringRequest);
}

当我使用this link时,我确实得到了响应,但是当我尝试使用一些仅包含JSON like this one的链接时,我的响应为“ [”。

我正在从Activity中调用此方法,如下所示:

 GetJsonClass getJson = new GetJsonClass(this);
 getJson.getJsonMethod();

关于我在这里做错什么的任何想法吗?


答案+代码

如果有人会开始使用Volley,也许这可以帮助他:

David Lacroix 在他的回答中说,我叫stringRequest而不是JsonArrayRequest

这是应该的样子:

   public void getJsonMethod() {
    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(context);
    String url = "your url";
    JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            System.out.println("this is response good" + response);
        }
    }, new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            System.out.println("this is response bad" + error);
        }
    });
    queue.add(jsonObjectRequest);
}

2 个答案:

答案 0 :(得分:1)

myTutorials.txt的状态代码为304(也没有正确的后缀和MIME类型):

  

304未修改。如果客户端已经执行了有条件的GET请求,并且允许访问,但是文档没有被修改,则服务器应该以该状态码响应。 304响应必须不包含消息正文,因此总是由标头字段之后的第一个空行终止。

换句话说,浏览器可能显示的内容不一定与服务器发送的内容相同。例如。 GSON仅在启用选项lenient的情况下接受JSON,因为该数组没有名称。

请参见RFC 2616

答案 1 :(得分:1)

请参见https://developer.android.com/training/volley/request

  

StringRequest。指定一个URL并接收一个原始字符串作为响应。有关示例,请参见设置请求队列。   JsonObjectRequest和JsonArrayRequest(JsonRequest的两个子类)。指定一个URL并分别获取一个JSON对象或数组作为响应。

您应该使用JsonArrayRequest