- Android Studio: получение JSON в RecyclerView и CardView. Урок № 1
- Смотрите видео: Android Studio: получение JSON в RecyclerView и CardView. Урок № 1
- Учебник по JSON для Android: создание и анализ данных JSON
- Введение в JSON
- Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3
- Смотрите видео: Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3
Android Studio: получение JSON в RecyclerView и CardView. Урок № 1
Всем привет, в этой статье я расскажу вам, как в Android Studio можно работать с json файлами.
Это будет первая статья, поскольку есть различия в работе с json , существует массив с именем, или не именной, можно выводить данные в recyclerview или listview , поэтому будут различные подходы в парсинге.
Смотрите видео: Android Studio: получение JSON в RecyclerView и CardView. Урок № 1
Это будет первая статья, затем мы перейдём к парсингу JSON файлов с хостинга. Но это будет немного позже начнем с самого простого примера, локального файла в папке assets .
Создадим новый проект, выбираем empty Activity , давайте назовём приложение, например, Load Json from assets-01 .
Идёт подготовка проекта, в нем мы будем использовать не listView будем использовать recyclerview и cardview .
А пока, если хотите можете поставить на паузу ролик и повторять то, что я пишу, и какие изменения делаю.
В файл build.gradle проекта внесем записи
это recyclerview и cardview для вывода данных и синхронизируем проект.
Всё хорошо, теперь займемся работой с нашими слоями в activity_main.xml введем RelativeLayout а в него androidx.recyclerview.widget с android:id=»@+id/recyclerView» .
Не будем делать фрагменты, в данном примере будет при запуске сразу отображаться нужная информация.
Создадим еще один слой назовем его row.xml в нем androidx.cardview.widget.CardView , LinearLayout с двумя TextView с android:id=»@+id/name» и android:id=»@+id/email» соответственно.
Хочу рассказать о json файле с которым будем работать, он состоит из идентификатора пользователя (id), имени пользователя (name) и электронной почты (email), то есть начнём с простейшего примера и далее будем это всё выводить.
Создадим в папке проекта New File Folder дикторию assets, и в ней нужно будет создать файл users.json.
Я заполнил его такими данными, название нашего массива – users , в нем поля — id, name, email, чисто случайные данные, для наглядности. В принципе больше нечего с ним мы делать не будем.
Теперь поработаем в файле mainactivity.java. Нам нужно будет объявить переменную recyclerView с типом RecyclerView перед onCreate , нужно связать список через findViewById(R.id.recyclerView) .
и передадим управление recyclerView
Так же нужно будет создать новый класс Java New Class, назовем его HelperAdapter для работы со списком, с данными json.
Он будет наследоваться от
MyViewClass мы напишем позже.
Выглядит это всё достаточно сложно на первый взгляд, но потом можно будет использовать этот код, вносить небольшие правки в именах полей и тому подобном. Делается практически один раз и нам не нужно будет создать каждый раз для аналогичных проектов.
для хранения имя и почты пользователей из users.json файла, поле id использовать в этом примере не будем.
Также объявим переменную для контекста,
будем определять его для работы с mainactivaty .
В конструкторе HelperAdapter
Соединим наши ранее объявленные переменный с классом, соответственно здесь присваиваются эти переменные.
В onCreateViewHolder , мы сделаем layout inflator , будем передавать ему данные, укажем что у нас ключевым для вывода данных является row.xml файл, в который будет все значения попадать.
Теперь давайте чтобы меньше было красных подчеркиваний, создадим всё-таки MyViewClass , спустим его ниже, выглядит он будет вот так:
MyViewClass наследуется от recyclerview viewholder объявляем переменные для имя и почты, в принципе это можно уже убрать, как бы понятно и передаем данные в пункт списка.
Нужно будет знать количество записей, сделать это можно чуть выше,
И ещё нам здесь осталось добавить onBindViewHolder в котором при нажатии на сам список будет появляться всплывающий текст.
Теперь перейдём в файл mainactivity.java , в ней будем работать с json объектами и массивами.
Нужно будет json файл получить в переменную jsonObject . Поскольку у нас ещё не написана JsonDataFromAsset функция, давайте её здесь вставлю, покажу и расскажу как она работает.
Поскольку будем базироваться в следующих видео тоже на похожем коде, то давайте разберемся как работает эта функция.
Мы передаем ей имя нашего json файла здесь у нас возвращается строковое значение, дальше разбор массива произойдет в цикле, try/catch — обработка исключений, здесь мы пробегаем по всему массиву через
открываем его в inputstream входящий поток, определяем размер, создаем массив байтов, передаём этот массив байтов через чтение из inputstream .
Закрываем поток, в переменную json в строковом виде в формате utf-8 наша функция JsonDataFromAsset будет возвращать данные.
Теперь из объекта получаем массив, обратите внимание данную конструкцию нужно обрабатывать через try/catch с исключениями, потому как здесь будет работать ещё цикл.
В цикле for мы будем пробегать по-нашему массиву ну и соответственно
Источник
Учебник по JSON для Android: создание и анализ данных JSON
В этом руководстве описывается, как использовать JSON с Android . JSON расшифровывается как (Java Script Object Notation). Это простой и легкий формат обмена данными, который может быть легко прочитан людьми и машинами. JSON — это текстовый формат, не зависящий от языка. Он представляет данные в текстовом формате, чтобы их можно было легко проанализировать.
Введение в JSON
JSON использует две разные структуры:
- Коллекция пары имя / значение
- массив
Первую структуру можно использовать для моделирования объекта, поскольку объект представляет собой набор атрибутов, которые содержат некоторые значения. Массив может использоваться для моделирования списка, массива объектов и так далее. Таким образом, используя эти две структуры, мы можем передавать данные между двумя машинами простым и эффективным способом. В последнее время JSON пользуется большим успехом, и большинство доступных API поддерживает формат JSON. Давайте посмотрим, как мы можем представлять данные в формате JSON.
Объект в JSON моделируется с помощью , а его атрибуты можно моделировать с помощью name: value pair.Value, в свою очередь, может быть объектом, массивом или «простым» значением, например, примитивным значением (int, Строка, логическое значение и т. Д.).
Так что если у нас есть, например, класс Java, как:
Источник
Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3
Всем привет и это уже третья статья и видео, посвященные работе в Android Studio с json файлами.
Из этой статьи вы узнаете как в android studio получать данные из JSON в ListView с сервера на хостинге.
Мы всё ближе и ближе подходим к тому, чтобы наконец-то начать получать данные с сервера на хостинге, а вот сейчас мы займемся как раз разбором данного примера.
Мы загрузим наш тестовый json файл с пользователями на хостинг и будем получать данные уже непосредственно из интернета.
Надеюсь видео вам понравится, можете пока создается новый проект поставить пальцы вверх, подписаться на канал, и мы приступаем.
Смотрите видео: Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3
Создаем новый проект, выбираем emptyActivity , традиционно жмем Next, назовём новый проект Load json from url -01 , финиш.
Пока подготавливается проект, хочу сказать, что я выложил наш тестовый json файл на хостинг и буду использовать его в качестве примера. Вы можете выложить свой файл, как Вам будет удобно с вашим содержимым. Замечу, что заходить по ftp на сервер, создавать домены, поддомены, создавать директории на хостинге вы обязаны уметь.
Если мы перейдём по ссылке m1.maxfad.ru/api/users.json, то мы можем увидеть структуру файла, перечень пользователей, электронные адреса. Сейчас это всё находится уже на хостинге в интернете.
Давайте поработаем над нашим проектом, кое-что будем использовать из второго урока, код будет немного совпадать, кто не смотрел предыдущие примеры, обязательно посмотрите.
Давайте сразу через New Resource File снова сделаем row.xml , для вывода пунктов нашего списка, чуть позже вернемся к нему.
Откроем AndroidManifest.xml , в нем нужно будет указать разрешение для работы с интернетом.
Также нам понадобится gradle файл, и в него мы вставим имплементацию библиотеки, которую Вы наверное, уже знаете, может кто-то уже слышал, это volley, по крайней мере так я её произношу.
Синхронизируем gradle , произошло добавление, будем работать с этой библиотекой, она как раз используется для сетевых запросов, для получения данных с сайтов и тому подобного.
В AndroidManifest добавим пользовательское разрешение для работы с интернетом.
Хочу сделать маленькое замечание, пока мы не начали всё писать, поскольку у меня, а возможно такое будет и у вас, сертификат не распространяется на поддомены, то для того чтобы не выдавались сообщения об ошибке, Вам нужно будет включить в блок application следующюю запись.
Это вроде как позволяет работать с недостоверными, скажем так с точки зрения Google, сайтами это требование корпорации добра, для вашей безопасности. С манифестом и с gradle закончили.
Теперь перейдем в activity_main , по традиции мы снова будем делать listview , заменим на RelativeLayout , textview меняем на listview , убираем отсюда опять всё ненужное.
Так значит для listview добавим android:id listView , ширина и высота — wrap_content .
Добавим еще один элемент для отображения сетевой активности, ProgressBar ширина wrap_content , высота тоже wrap_content .
Сделаем видимость ProgressBar в
Вот теперь важное: для ProgressBar добавить нужно центрирование по горизонтали и по вертикали, чтобы элемент был по центру экрана.
Так он пока где-то находится, его не видно, можно посмотреть. он находится по центру и будет крутиться.
Перейдём в row.xml для вывода пунктов, сделаем здесь LinearLayout , ширина match_parent , а высота wrap_content , ориентация вертикальная, отступы – 16dp .
Так теперь добавим два textview , вы уже знаете какие, это у нас будут для name и email.
Добавим для видимости текст,
Так значит нам нужно будет создать новый класс для обработки. Наш класс мы назовём ListViewAdapter .
И теперь я буду вставлять куски кода, потому как мы его писали в прошлый раз, но для тех, кто не смотрел, кое-что расскажу, буду уже всё равно блоками вставать, поскольку он практически готов.
Снова напишем конструктор, в котором будем вызываться контекст, слой, которые у нас row , будем вызывать поля, в принципе можно там первое вызвать name и уже будет работать и список который будет передавать данные.
Метод super это всё вызывает, здесь присвоение переменных.
Ну и опять без изменений практически из второго видео, с некоторыми оговорками получается вот такая функция.
В getView определяем слой для вывода данных, обращаемся к элементам пункта name , email . В блоке обработки исключений try/catch циклично присваиваем текст, получая его из списка userlist .
Кто смотрел мое второе видео по json , тот знает, что это такое, в принципе больше на этом останавливаться не будем.
Теперь переходим в mainactivity и поработаем в ней. Итак, нам нужно будет объявить несколько переменных, переменная JSON_URL в которой мы будем хранить наш адрес, по которому будет лежать наш файл на сайте.
и ListView listView для списка.
Я надеюсь вы знаете как заливать файлы на хостинг, поэтому я не буду рассказывать, как мне удалось создать папку api в поддомене и положить туда файл, думаю это вам уже известно, если вы занимаетесь и обучайтесь разработке Android приложений для себя, либо по учёбе, по работе.
Сразу же мы получаем наш listView , наш список через findViewById
А вот теперь мы напишем вот такую строчку,
это по сути в onCreate больше ничего не будет. Дальше будет несколько функций, которые мы напишем в рукопашную.
И эта функция loadJSONFromURL будет вызывать наш адрес, и будем получать данные.
Далее напишем ручками Private void loadJSONFromURL , в качестве параметра Stirling передаём url .
Нужно будет обратиться к нашему элементу ProgressBar , который у нас указан в activity_main progressBar
ProgressBar надо будет сделать видимым
Теперь пишем StringRequest , обратите внимание это мы работаем с библиотекой volley ,
передаём наш url , пишем new Response.Listener
Открываем скобки пишем @Override ,
Нам нужно добавить метод onResponse , подключить сюда onResponse .
Далее делаем ProgressBar не видимым.
Всё мы его скрыли, теперь у нас идёт обработчик исключений try , пишем
и указываем нашу таблицу users , которая у нас внутри файла users.json .
Объявляем ArrayList JSONObject
и вот здесь мы напишем ту функцию, которую мы писали в прошлый раз.
В прошлый раз, я хочу напомнить, мы её вставим вне функций, мы её Встаём целиком и полностью, можете скопировать её из второго примера. Поскольку будем выполнять то же самое действие здесь.
Не буду останавливаться, но тут происходит наполнение данными из массива. Передаём jsonArray , далее пишем ListAdapter adapter
И теперь для списка установим адаптер
Блок исключений catch
Далее идет Response.ErrorListener
В нем Toast выводит ошибки. Что такое тосты уже знаете, последние две строчки данной функции
Вот теперь только вызываться наша библиотека, которая в конце концов вызовет наконец-то запрос и сформирует нужный результат.
Так, здесь я пропустил запятую после переменной url , и в принципе больше у нас ни каких нюансов быть не должно… А они будут…)
Сохраняем, запускаем… Эмулятор запустился, и мы получили данные…
Поскольку наш файл вряд ли был в кодировке UTF-8 , но здесь должен быть четко UTF-8 . Напишу для себя UTF-8 , должна быть такая кодировка, тогда у нас будут русские буквы, русский текст нормально выглядить.
Сложно догадаться, что это Коля, Вася, Федя, и тому подобное, хотя email отобразился нормально.
Значит нам нужно будет написать ещё одну небольшую функция, которая превратит наш ответ – response , превратит эту кашу в кодировку UTF-8 .
Итак давайте исправим это недоразумение, написав еще одну функцию EncodingToUTF8
В качестве параметра передаём string response , сразу try обработчик, пишем массив байт, code
Ответ в строку, получим байты в кодировке ISO-8859-1 , западноевропейская кодировка, и конвертируем в UTF-8 , перегоним нашу абракадабру в понятный вид.
После обработки ошибок Catch вернем строковое значение response.
Вот такая получилась небольшая функция в принципе когда мы перейдём наконец-то в четвёртый урок, в четвёртом занятие, мы будем получать данные уже непосредственно из PHP с базы данных на хостинге, и этот костыль не понадобится, поскольку мы обойдемся без неё, там уже будем конвертировать текст, можно в базе указать.
И давайте её вызовем EncodingToUTF8 наш response , сохраним и перезапустим.
Вот так, всего лишь одна небольшая функция и мы превратили абракадабру во вполне понятной вид.
Источник