Ответ на голосовое управление Android Volley JSONArray

Я отправляю запрос JSONArray GET с помощью Volley, и он возвращает указанный массив JSON. Вот мой запрос:

JsonArrayRequest getRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { Log.d("Response", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("Error.Response", error.toString()); } } ); VolleySingleton.getInstance(this).addToRequestQueue(getRequest); //Call to get dashboard feed } 

Как вы можете видеть, я сейчас просто выхожу из ответа. Я хочу проанализировать массив и показать результаты в виде списка. Документация для этого невелика, и я довольно зеленый с точки зрения Android dev. Каков правильный способ анализа массива JSON из Volley и отображения результатов в виде списка? Я понял, что должен использовать parseNetworkResponse , но не уверен, как реализовать.

Я бы рекомендовал придерживаться библиотеки GSON для разбора JSON. Вот как выглядит запрос Volley со встроенной обработкой JSON:

 import java.io.UnsupportedEncodingException; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; /** * Volley GET request which parses JSON server response into Java object. */ public class GsonRequest<T> extends Request<T> { /** JSON parsing engine */ protected final Gson gson; /** class of type of response */ protected final Class<T> clazz; /** result listener */ private final Listener<T> listener; public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.listener = listener; this.gson = new Gson(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success( gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } } 

Допустим, у вас есть метод сервера, расположенный по адресу http://example.com/api/persons/, который возвращает массив JSON Person; Человек выглядит следующим образом:

 public class Person { String firstName; String lastName; } 

Мы можем вызвать вышеупомянутый метод следующим образом:

 GsonRequest<Person[]> getPersons = new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class, new Listener<Person[]>() { @Override public void onResponse(Person[] response) { List<Person> persons = Arrays.asList(response); // TODO deal with persons } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO deal with error } }); VolleyQueue.get().add(getPersons); 

И, наконец, в ответном прослушителе мы получаем массив Person, который можно преобразовать в список и загрузить в адаптер ListView.

Вы можете использовать проект Gson для работы с json в java и андроид-приложении, это так просто, эта ссылка является образцом ссылки на использование gson

Как преобразовать объект Java в / из JSON (Gson)

Вы можете использовать собственный JSONParsor в структуре Android, ваши требования сравнительно меньше, и JSON прост . Вот ссылка на учебник.

Но если вы используете сложные объекты JSON , используйте библиотеки, такие как

  • GSON
  • Джексон

Я нахожу GSON более простым и эффективным в использовании. Вы знаете больше об этом отсюда

Intereting Posts
Как безопасно завершить работу петлителя HandlerThread Вход в систему Имя пользователя и адрес электронной почты в Parse Android Как исправить это следует только вызывать, когда курсор действителен с помощью ExpandableListView Почему я не могу использовать getFilesDir (); В статическом контексте? Резервное копирование и восстановление базы данных SQLite на SDCard Шерлок Action Bar: findViewById (android.R.id.home) возвращает null в android 2.3 Как я могу реализовать лицензирование Google Play для Android-приложения? Использование атрибута onClick в макете xml вызывает NoSuchMethodException в диалоговом окне Android Чтение и запись двоичного файла в Java (просмотр половины поврежденного файла) XML или Java-ключевые слова в Android для Admob Каков исчерпывающий список всех действий «android.intent.action», доступных в Android SDK? Android – Использование пользовательского шрифта Как сделать мобильную веб-страницу на Android? Как реализовать горизонтальную прокрутку для панели инструментов в android? Сохранение связанного состояния службы до того, как оно будет убито Android