Почему волейбольный ответ получен как «[», а не как JSON - PullRequest
0 голосов
/ 29 мая 2019

Я узнаю о Залп и не знаю, почему ответ от метода 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);
}

Когда я использую эту ссылку Я получаю ответ, но когда я пытаюсь использовать какую-то ссылку, котораяне содержит ничего, кроме JSON как этот мой ответ это "[".

Я вызываю этот метод из Activity следующим образом:

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

Любые идеи о том, что я делаю здесь не так?


Ответ + код

Если кто-то начнет использовать Volley, может быть, это может помочь ему:

как Дэвид Лакруа сказал в своем ответе, что я позвонил 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 ]

1 голос
/ 29 мая 2019

См. https://developer.android.com/training/volley/request

StringRequest.Укажите URL и получите в ответ необработанную строку.См. Настройка очереди запросов для примера.JsonObjectRequest и JsonArrayRequest (оба подкласса JsonRequest).Укажите URL и получите в ответ объект или массив JSON (соответственно).

Вы должны использовать JsonArrayRequest

1 голос
/ 29 мая 2019

myTutorials.txt обслуживается с кодом состояния 304 (без правильного суффикса и типа MIME):

304 Не изменено .Если клиент выполнил условный запрос GET и доступ разрешен, но документ не был изменен, сервер ДОЛЖЕН ответить этим кодом состояния. Ответ 304 НЕ ДОЛЖЕН содержать тело сообщения и поэтому всегда завершается первой пустой строкой после полей заголовка.

Другими словами, что может отображать браузерне обязательно то же самое, что отправил сервер.например.GSON примет это JSON только с включенной опцией lenient, поскольку у массива нет имени.

см. RFC 2616 .

...