Как обрабатывать массив объектов в ответ при использовании StringRequest в залпе Android

У меня есть андроид приложение. в этом приложении я отправляю некоторые строковые данные на сервер и получаю ответ. Проблема в том, что я получаю ответ в jsonstring, но мне нужны эти данные в массиве json. хотя, когда я использую JsonArrayRequest, он не разрешает метод публикации в параметре, и тогда мой веб-сервис не работает. Итак, я придерживаюсь StringRequest, и служба работает нормально, но полный ответ возвращается как целая строка. Поэтому я не могу отобразить свои данные в виде списка. Итак, как решить эту проблему?

Вот мой код:

StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(NewSearchPeople.this, response, Toast.LENGTH_LONG).show();

//                        search1();
                        try {
                            JSONArray jsonArray = new JSONArray(response);

                            for(int i=0;i<jsonArray.length();i++){
                                JSONObject obj = jsonArray.getJSONObject(i);

                                Movie movie = new Movie();
                                movie.setTitle(obj.getString("fullname"));
                                movie.setThumbnailUrl(obj.getString("image"));
                                movie.setRating(obj.getString("location"));
                                movie.setGenre(obj.getString("Description"));

                                movie.setYear(obj.getInt("id"));

                                  movieList.add(movie);
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }


                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(NewSearchPeople.this, error.toString(), Toast.LENGTH_LONG).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("fullname", "pooja");

                return params;
            }

        };

Вот JSON-ответ:

[
{
    "id":"442",
    "fullname":"xyz(18 yr)",
    "image":"\/2017-02-0823:49:521486619389674.jpg",
    "location":"lkn","Description":null
},
{
    "id":"443",
    "fullname":"abc(28 yr)",
    "image":"\/2017-02-0823:51:381486619493934.jpg",
    "location":"md","Description":null
},
{
    "id":"444",
    "fullname":"Arya(25 yr)",
    "image":"\/2017-02-0823:52:251486619540695.jpg",
    "location":"ud","Description":null
}
]

person Community    schedule 10.02.2017    source источник
comment
comment
Пожалуйста, проверьте, является ли JSONArray нулевым или нет. чем начать разбор.   -  person Shailesh    schedule 10.02.2017
comment
ваш код кажется прекрасным. подскажите пожалуйста с какой проблемой вы столкнулись?   -  person Shailesh    schedule 10.02.2017


Ответы (1)


Это можно решить в обоих запросах StringReq и JSONArrayReq.

Но лучше исправить это с помощью JSONArrayRequest, а для передачи post параметров вы можете использовать метод getBody() или getParams() в зависимости от типа.

JsonArrayRequest stringRequest = new JsonArrayRequest( METHOD_TYPE, url,null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {

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

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return headers == null ? super.getHeaders() : headers;
            }

            @Override
            public byte[] getBody(){
                return BODY.toString().getBytes();
            }
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("fullname", "pooja");
                return params;
            }
        };

выше приведен простой пример того, как передавать тело в почтовых запросах.

Иногда структура анонимного класса становится очень запутанной и нечитаемой, поэтому я бы предложил создать конкретный класс (может быть статическим внутренним).

person Nayan Srivastava    schedule 10.02.2017