Импорт данных из JSON или XML-канала и создание списка на Android

Я пытаюсь создать класс Android, который создает список других приложений, для последующего отображения, до сих пор у меня есть следующий код для создания списка (взятый из примера Google):

public final class AppList { public static List<App> list; public static List<App> setupApp() { list.add(buildAppInfo( "Browsers", "chrome", "description", "Google Inc.", "com.android.chrome", "http://...", "http://..." )); list.add(buildAppInfo( "Browsers", "Firefox", "description", "Mozilla", "com.mozilla.firefox", "http://...", "http://..." )); [An so on...] return list; } private static App buildAppInfo(String category, String title, String description, String developer, String packageName, String iconImageUrl, String bgImageUrl) { App app = new App(); app.setId(App.getCount()); App.incCount(); app.setTitle(title); app.setDescription(description); app.setDeveloper(developer); app.setCategory(category); app.setIconImageUrl(iconImageUrl); app.setBackgroundImageUrl(bgImageUrl); app.setPackageName(packageName); return app; } } //From here everything is handled in other activity 

Я хотел бы вместо этого динамически загружать детали с веб-сервера, который я могу настроить для подачи или JSONArray или XML, а затем поместить эти данные в список. Для того, что я читал, я мог бы использовать Volley, но я не очень опытен в Volley или Java вообще (я просто учился на дороге), поэтому мне не нужно много думать о том, как действовать.

С сайта разработчиков Google я нашел пример . Я подумывал добавить что-то вроде этого:

 public final class AppList { public static List<App> list; public static List<App> setupApp() { /*Json Request*/ String url = "https://json_url/"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { list.add(response);//ADD ITEMS TO LIST HERE } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); return list; } private static App buildAppInfo(String category, String title, String description, String developer, String packageName, String iconImageUrl, String bgImageUrl) { App app = new App(); app.setId(App.getCount()); App.incCount(); app.setTitle(title); app.setDescription(description); app.setDeveloper(developer); app.setCategory(category); app.setIconImageUrl(iconImageUrl); app.setBackgroundImageUrl(bgImageUrl); app.setPackageName(packageName); return app; } } 

Данные, полученные от фида сервера, должны быть примерно такими:

 buildAppInfo( "Browsers", "Firefox", "description", "Mozilla", "com.mozilla.firefox", "http://...", "http://..." ) buildAppInfo( "Browsers", "Firefox", "description", "Mozilla", "com.mozilla.firefox", "http://...", "http://..." ) [...] //BUT IN JSON FORMAT 

Очевидно, что мой весь подход не работает. Может кто-то, пожалуйста, помогите мне достичь того, что мне нужно? Спасибо.

Простейшая настройка для того, что вы хотите сделать, требует:

Способ чтения содержимого из URL-адреса, разбора полученного массива JSON. Например, в JSONArray или JSONObject (который вы можете получить в mvnrepository ):

 public static JSONArray parseJsonFromUrl(String uri) throws IOException, JSONException { JSONArray array = null; try (Scanner sn = new Scanner(new URL(uri).openStream(), "UTF-8")){ array = new JSONArray(sn.useDelimiter("\\A").next()); } return array; } 

Отображение полученной информации в List конкретных объектов App , например:

 public static List<App> getAppList(JSONArray array){ List<App> appList = new ArrayList<>(); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); appList.add(buildAppInfo(object.getString("category"), object.getString("title"), object.getString("description"), object.getString("developer"), object.getString("packageName"), object.getString("iconImageUrl"), object.getString("bgImageUrl"))); } return appList; } 

Подход к потреблению XML аналогичен, вместо этого используется синтаксический анализатор XML (посмотрите, как читать XML-ответ с URL-адреса в java? ).

Вы можете использовать более продвинутые инструменты, такие как Jackson Mapper или Spring RestTemplate для использования службы RESTful, но я предлагаю начать с этого простого подхода, пока вы не познакомитесь с экосистемой Java.

[ОБНОВИТЬ]

Я сделал быструю демонстрацию, используя код этого ответа, чтобы вы могли возиться с ним. Вы также можете использовать его в качестве шаблона для создания службы отдыха, которая вам нужна, используя Spring Boot. (Проверьте https://elcodedocle-jsontest.herokuapp.com/apps для активного развертывания последней прошедшей сборки travisCI службы)

[ANOTHER_UPDATE]

В случае, если вы все еще невежественны, вот полное приложение для Android, в котором используется список (json-массив «jon-объектов приложения»), обслуживаемых службой RESTful, используя код, написанный на этом ответе из приложения Android (да, вы можете импортировать этот Как полностью функциональный проект студии Android): https://github.com/elcodedocle/android-resttest

Помните, что это основной пример, используя самый простой способ, с помощью которого я могу придумать для новичков. Если вы некоторое время продолжаете кодирование вокруг экосистемы Java, вы обнаружите более продвинутые инструменты, которые могут оказаться более подходящими для вашего проекта, как только у вас будет достаточно опыта, чтобы иметь возможность обернуть вокруг себя правильное использование.