Android inputstream to json

Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2

Всем привет, и сегодня мы продолжим рассматривать возможности работы с json файлами в Android Studio.

На этот раз будем использовать listView для отображения данных, хочу напомнить, что в прошлом видео мы работали с recyclerview и cardview , и сегодня будем делать макет попроще, будет иной принцип подключения файла json со списком.

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

Смотрите видео: Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2

Давайте создадим новый проект с пустой активностью, дадим названием, как вы помните в прошлый раз проект назывался Load Json from assets -01 , назовем также с цифрой два, Load Json from assets -02 .

Проект у нас загружен, и давайте создадим папку assets для json файла, создадим новый файл users.json, на этот раз вставим значение, но без имени массива users , сейчас поработаем с безымянном массивом, позже я покажу как работать с этим файлом, сохраним, закроем файл.

Откроем activity_main.xml , заменим виджет ConstraintLayout на RelativeLayout , а TextView изменения на ListView . Уберём отсюда всё лишнее и добавим Android:id ListView .

Список ListView будет для общего плана, а для пунктов списка создадим в папке layout ещё один Resource File, как и в прошлом примере назавем его row.xml . Заменим в разметке RelativeLayout , id не нужен, добавим отступы 6dp.

Внутри RelativeLayout добавим LinearLayout , ориентация – вертикальная, внутренний отступ – 5dp.

Так же добавим два TextView с id, name и email, соответственно, размер текста – 30sp.

Для RelativeLayout и LinearLayout установим ширину — match_parent , высоту — wrap_content , с разметкой закончили.

Переходим в MainActivity , объявим переменную типа ListView – listview , обратимся к элементу экрана из кода через findviewbyid

Давайте создадим новый класс которая нас будет отвечать за работу с данными в json файле и списком.

Назовем его UserAdapter , адаптер будет наследоваться от

Нам нужна будет int переменная listLayout , ArrayList list и как уже говорилось контекст, Context context .

Далее напишем конструктор

Напишем присвоение переменных

Ну теперь нам нужно будет сделать, как мы в прошлый раз делали, получение нашего View , создадим Layout inflator , который будет обращаться к объекту, к нашему файлу разметки row.xml для отображения пунктов списка.

Вот так у нас выглядит наш обработчик, здесь получилось, что мы меньше писали кода в классе UserAdapter чем в прошлом примере.

Теперь перейдем в mainactivity и продолжим, поскольку у нас массив users.json безымянный, нам проще обратиться к нашему файлу, чем если бы он имел имя.

Пишем в onCreate

И ниже, вне onCreate напишем функцию getJSonData

Объявим переменную и проинициализируем ее.

В блоке обработки исключений try/catch получим содержимое файла

Источник

Урок 14. Знакомство с форматом JSON. Парсинг JsonObject на примере объекта User

В этом уроке мы с вами более подробно познакомимся с форматом JSON . А потом из этого формата получим наш User объект.

Читайте также:  Иконка для соц сетей андроид

JSON стал общепринятым форматом для обмена данными в клиент-серверных приложения. Он является универсальным форматом для обмена данными.

Представьте, что вам нужно создать систему приложений, в которую входит, сервер, web -клиент, ios -клиент, android -клиент. У всех технологий разные языки,
разные особенности. Поэтому сервер отвечает в формате JSON , а клиенты на своей стороне приводят к нужному формату ответы. Подробнее про JSON формат можно
почитать здесь, но на данном этапе ваших знаний уже вполне хватит.

JSONObject, работа с JSON в java коде

Давайте создадим новый класс в пакете network и назовём его JsonParser для преобразования Json -строк в необходимые нам объекты. Добавим в него один
метод, который назовём getUser(String response) :

Мы будем использовать этот метод внутри класса HttpClient , передавая в него ответ от сервера в формате String , возвращая объект User . Давайте
разберём преобразование, рассмотрим структура хранения JSON . В прошлом уроке мы в конце вывели ответ от сервера в log и увидели очень большой объект JSON .
На данном этапе нам необходимы только те поля, которые мы отображаем на экране. Поэтому опустим остальные поля и оставим только те, которые нам нужны:

Видим, что наш JSON полностью повторяет структуру нашего объекта User . Теперь можно приступить к парсингу (преобразованию) данных.

Первое, что необходимо сделать – это создать JSON объект из строки:

Видим, что AndroidStudio подчёркивает эту строку, указывая что надо обработать исключение или добавить его к сигнатуре метода. Можем нажать alt + enter
и увидеть два этих варианта решения проблемы. Добавим исключение к сигнатуре, чтобы обработать исключения в клиентском коде. Для этого выберем вариант Add exception to method signature :

JSONObject представляет из себя структуру типа HashMap (ключ – значение).
Т.е. чтобы получить значения поля id нам необходимо выполнить вызов метода
userJson.getLong(«id») (получить значение типа long по ключу (названию поля) id ). Давайте сделаем тоже самое для каждого поля.
После этого метод будет выглядеть так:

Т.е. вот так по названию поля мы можем достать его значение. Нам попался самый простой случай, где наши значения являются примитивными типами. На практике мы
поработаем с массивами элементов и вложенными объектами.

Давайте создадим объект User , передав ему в конструктор все поля, которые мы только что достали из userJson :

Вот и всё! Теперь давайте добавим использование нашего класса внутри класса HttpClient .

Добавили JsonParser как final поле в классе HttpClient и инициализируем его в конструкторе.

После этого добавили строку User user = jsonParser.getUser(response); в конец метода getUserInfo и поменяли возвращаемый тип на User и добавили новое
исключение JSONException в сигнатуру метода. Отлично, теперь изменим код в UserInfoActivity и запустим приложение.

в UserInfoActivity нам нужно изменить метод loadUserInfo :

Возвращаемый тип Asynctask со String на User .

Добавили в catch блок перехват исключения типа IOException | JSONException .

В onPostExecute мы заменили вызов Log.d() на вызов реального метода отображения displayUserInfo(user) .

Давайте запустим наше приложение:

Всё работает! Только видим, что наш ник выводится без символа @ . Давайте изменим метод getNick() в классе User . Будем добавлять в него символ @ самостоятельно, т.к. сервер этого не сделал.

Запустим наше приложение и увидим, что теперь с форматом поля nick всё в порядке:

Источник

Android — сохранить JSON из InputStream в строку

Я пытаюсь проанализировать этот JSON, который я получаю из HttpURLConnection в Android.

То, что я хочу сделать, это сохранить содержимое value1 в строке, содержимое value2 в другой строке. потому что мне нужно сохранить его в базе данных, поэтому в будущем я могу загрузить и проанализировать его. Я использую JsonReader, но это невозможно сделать с помощью JsonReader.

Читайте также:  Все для android сони

Есть идеи? Пользовательские объекты невозможны, потому что мы никогда не знаем, какие значения JSON покажет.

8 ответов

Используйте это для преобразования массива JSON в строку

Этот код работает для вашего примера JSON.

Используйте Gson для анализа JSON, который вы получаете в InputStream. Затем вы можете получить ArrayList из этого проанализированного объекта. Снова используйте Gson для сериализации массива обратно в JSON.

Просто регулярно читайте поток и сохраняйте его в обычную строку, а затем анализируйте эту строку:

теперь у вас есть все значения (какими бы ни были их идентификаторы имен), объединенные в этот ArrayList с именем (all_values).

Обратите внимание, что в JSON, который вы указали в своем вопросе, отсутствуют открывающие скобки «<" и закрывающие ">» в начале и конце.

Поскольку вы заранее не знаете структуру json, лучше всего использовать функцию GSON 2.0, которая поддерживает карты и списки по умолчанию. Используйте следующий код для десериализации:

Созданный объект — это карта (com.google.gson.internal.LinkedTreeMap), которая выглядит следующим образом (для приведенного выше примера)

Используйте сгенерированный объект, проанализируйте его и сохраните в своей базе данных. Вы можете сериализовать эту карту обратно в JSON, используя:

Надеюсь, это поможет вам.

Что вам нужно сделать, так это сначала создать JsonObject из строкового представления json, на данном этапе никаких подробностей не дается.

Интересно, что вы упомянули, что структура меняется, она считает странным, я предполагаю, что вы используете разные экземпляры API. Что вам нужно сделать, создать класс pojo, отображающий имя экземпляра API в тело возвращенной строки json.

После того, как вы достигли интересующего вас объекта, рассмотрите возможность использования GSON. Библиотека сериализации / десериализации Java для преобразования объектов Java в JSON и обратно. Затем вам нужно сериализовать класс pojo в объект. Затем сохранить в базе данных. Я рекомендую использовать область, а не SQLite.

Пример сериализации класса.

затем получите объект json String и сохраните его в выбранной базе данных.

Источник

Учебник по JSON для Android: создание и анализ данных JSON

В этом руководстве описывается, как использовать JSON с Android . JSON расшифровывается как (Java Script Object Notation). Это простой и легкий формат обмена данными, который может быть легко прочитан людьми и машинами. JSON — это текстовый формат, не зависящий от языка. Он представляет данные в текстовом формате, чтобы их можно было легко проанализировать.

Введение в JSON

JSON использует две разные структуры:

  • Коллекция пары имя / значение
  • массив

Первую структуру можно использовать для моделирования объекта, поскольку объект представляет собой набор атрибутов, которые содержат некоторые значения. Массив может использоваться для моделирования списка, массива объектов и так далее. Таким образом, используя эти две структуры, мы можем передавать данные между двумя машинами простым и эффективным способом. В последнее время JSON пользуется большим успехом, и большинство доступных API поддерживает формат JSON. Давайте посмотрим, как мы можем представлять данные в формате JSON.

Объект в JSON моделируется с помощью , а его атрибуты можно моделировать с помощью name: value pair.Value, в свою очередь, может быть объектом, массивом или «простым» значением, например, примитивным значением (int, Строка, логическое значение и т. Д.).

Так что если у нас есть, например, класс Java, как:

Источник

Самый простой способ прочитать JSON с URL в Java

Это может быть глупый вопрос, но как проще всего читать и анализировать JSON из URL в Java ?

В Groovy это всего лишь несколько строк кода. Примеры Java, которые я нахожу, смехотворно длинные (и имеют огромный блок обработки исключений).

Читайте также:  Sony android tv установить apk с флешки

Все, что я хочу сделать, это прочитать содержание этой ссылки .

Используя артефакт Maven, org.json:json я получил следующий код, который я считаю довольно коротким. Не настолько короткий, насколько это возможно, но все же пригодный для использования.

Вот несколько альтернативных версий с Джексоном (поскольку есть несколько способов, которыми вы можете получать данные как):

И конкретно обычный (IMO) случай, когда вы хотите иметь дело с объектами Java, может быть сделан одним вкладышем:

Другие библиотеки, такие как Gson, также поддерживают однострочные методы; почему многие примеры показывают гораздо более длинные разделы, странно. И что еще хуже, многие примеры используют устаревшую библиотеку org.json; это, возможно, было первым делом, но есть полдюжины лучших альтернатив, так что причин для его использования очень мало.

Самый простой способ: использовать gson, собственную библиотеку goto json от google. https://code.google.com/p/google-gson/

Вот образец. Я собираюсь на этот бесплатный веб-сайт геолокации и парсинг JSON и отображение моего почтового индекса. (просто поместите этот материал в основной метод, чтобы проверить это)

Если вы не возражаете против использования пары библиотек, это можно сделать в одну строку.

Используйте HttpClient, чтобы получить содержимое URL. А затем используйте библиотеку из json.org для анализа JSON. Я использовал эти две библиотеки во многих проектах, и они были надежными и простыми в использовании.

Кроме этого вы можете попробовать использовать Java API библиотеки Facebook API. У меня нет никакого опыта в этой области, но есть вопрос переполнения стека, связанный с использованием API Facebook в Java . Возможно, вы захотите посмотреть на RestFB как на хороший выбор для использования библиотекой.

Я сделал парсер JSON самым простым способом, вот он

этот класс возвращает объект json из URL

и когда вам нужен объект json, вы просто вызываете этот класс и метод в вашем классе Activity

здесь «ключ JSON» обозначается как ключ в вашем файле JSON

это простой пример файла JSON

Здесь «JSON» является ключом, а «привет» является значением

Это позволит получить значение json для строкового содержимого.

С помощью jersey-client очень просто включить эту зависимость maven:

Затем вызовите его, используя этот пример:

Затем используйте Google Gson для анализа JSON:

Я считаю, что это самый простой способ на сегодняшний день.

Используйте этот метод:

И используйте это так:

Я не уверен, что это эффективно, но это один из возможных способов:

Чтение json из URL-адреса url.openStream() и чтение содержимого в строку.

создать объект JSON с этой строкой (подробнее на json.org )

Я хотел добавить обновленный ответ здесь, так как (несколько) недавние обновления JDK сделали немного легче читать содержимое HTTP-URL. Как уже говорили другие, вам все равно нужно будет использовать библиотеку JSON для анализа, поскольку JDK в настоящее время не содержит ее. Вот несколько наиболее часто используемых библиотек JSON для Java:

Для извлечения JSON из URL-адреса это, по-видимому, самый простой способ с использованием строго классов JDK (но, вероятно, это не то, что вы хотели бы делать для больших полезных нагрузок), Java 9 представила: https://docs.oracle.com/en/ Java / JavaSE / 11 / документы / API / java.base / Java / IO / InputStream.html # readAllBytes ()

Для анализа JSON с помощью библиотеки GSON, например,

Вот полный пример того, как анализировать содержимое Json. Выполняется Android статистики версии (найдено из исходного кода Android студии здесь , который отображает ссылку здесь ).

Скопируйте полученный вами оттуда файл «Distribution.json» в Res / Raw как запасной вариант.

build.gradle

манифест

MainActivity.kt

В качестве альтернативы зависимости, вы также можете использовать это вместо:

Источник

Оцените статью