Всем привет, и сегодня мы продолжим рассматривать возможности работы с 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< JSONObject > list
и как уже говорилось контекст, Context context
.
Далее напишем конструктор
затемНапишем присвоение переменных
Ну теперь нам нужно будет сделать, как мы в прошлый раз делали, получение нашего View
, создадим Layout
inflator
, который будет обращаться к объекту, к нашему файлу разметки row.xml
для отображения пунктов списка.
Вот так у нас выглядит наш обработчик, здесь получилось, что мы меньше писали кода в классе UserAdapter
чем в прошлом примере.
Теперь перейдем в mainactivity
и продолжим, поскольку у нас массив users.json
безымянный, нам проще обратиться к нашему файлу, чем если бы он имел имя.
Пишем в onCreate
И ниже, вне onCreate
напишем функцию getJSonData
filename
.Объявим переменную и проинициализируем ее.
В блоке обработки исключений try/catch
получим содержимое файла
Узнаем размер
создадим массив байт
прочитаем его
закроем
Далее в строковую переменную String json
поместим значение переменной data в формате как Вы уже догадались UTF-8
И теперь в переменную jsonArray
поместим массив из строковой переменной json
.
В обработке исключений IOException
переменная e
, и e.printStackTrace()
.
Еще один блок Catch
теперь исключение JSONException
js
, и js.printStackTrace()
.
Наша функция должна вернуть return jsonarray
.
Функция, которая будет обрабатывать наш json
файл у нас уже есть. теперь нам нужно будет написать ещё один обработчик работы с ListView
для вывода наших данных.
Давайте ещё напишем приватную функцию
в качестве параметра буду передавать JSONArray
переменная jsonArray
Создадим
Это будет возвращаемая переменная в конце, а пока она будет для накопления данных из ArrayList
.
Снова блок try/catch
, в try
мы напишем если jsonArray
не равно null,
то в цикле for
В наш aList
через метод add
- добавить, будем наполнять из jsonArray.getJSONObject
. Снова блок исключения,
возвращаемое значение return alist
.
Вот что у нас получилось, с основной частью мы закончили, возвращаемся в это место и вернёмся к нашей функции onCreate
.
Напишем
Так у нас выглядит весь код, сохранимся. Можно попробовать запустить его на выполнение в эмуляторе, он запустился у меня на другом мониторе и вот у нас получились элементы списка с именами Коля, Вася, Федя, Юра и их почтовые адреса.
Мы добились того, чего хотели, применили для вывода из json
элемент listView
вместо recyclerview
и cardview
.
В нашем gradle
файле ничего как видите не указано из прошлого видео примера.
Теперь давайте сделаем наш массив именным, и как нам получить из него данные назовем его users
, вот так у нас выглядел бы наш массив, как прошлом примере.
Если запустить приложение в списке ничего нет. Вроде один и тот код, и файл тот же, но ничего не происходит. Давайте теперь перепишем функцию так, чтобы нам возвращалась значение из именного массива.
Значит это часть у нас пока останется, поскольку здесь у нас возвращается массив, нам нужно будет получить строки.
Для этого нам нужно будет изменить код следующим образом напишем блок try/catch
И обратимся к массиву users
внутри json
файла
Закомментируем строку из первого примера, теперь getJSonData
у нас должно возвращать строковое значение, давайте вот так если мы захотим вернуться, то нам нужно будет изменить JSONArray
на String
jsonArray
давайте я тоже закомментирую, продублирую и изменю тип на String
и закомментируем здесь
Удалим блок исключения JSONExeption
, и теперь функция возвращает строковое значение.
Теперь можно запустить по новой и посмотреть, что получится в итоге. Как видите при таком способе у нас из json файла с именем массива users
получены данные.
Если мы теперь опять уберём имя массива, то естественно у нас больше ничего работать не будет потому такие нюансы нужно учитывать при работе с json
.
Cкачать архив для ознакомления - Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2:
Полный текст activity_main.xml
Полный текст row.xml
Полный текст MainActivity.java
Полный текст UserAdapter.java
Смотрите видео: Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2
С уважением, авторы сайта Компьютерапия
Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!
Связанные статьи
Новые статьи
Предыдущие статьи
- Android Studio: получение JSON в RecyclerView и CardView. Урок № 1 - 04/12/2020 19:40
- JS база данных и ANDROID STUDIO. Часть 3 - 15/12/2019 06:40
- Уведомления - Notifications в Android Studio - 16/04/2019 18:14
- Блютуз подключение в Android (проект для Arduino). Часть 1. - 12/04/2019 17:14
- Установка android studio и настройка SDK на VirtualBox с нуля - 19/01/2019 11:52
- Android Studio Как сделать виджет - игру Орел или решка - 08/04/2018 19:38
- Android Studio: Как сделать боковое меню с помощью NavigationDrawer - 05/04/2018 20:35
- Android Menu, как сделать меню андроид - 08/03/2018 14:44
- Создание подписанного приложения для android. Generate Signed APK. - 17/02/2018 09:50
- Android and Jsoup. Парсим вебсайт на вордпрессе. Расписание уроков - часть 3 - 15/01/2018 18:25
- Создание расписания уроков для андроид устройств. Часть 2. База данных SQLITE и фрагменты - 13/12/2017 19:49
- Создание расписания уроков для андроид устройств. Array Adapter для фрагментов. - 06/12/2017 15:07
- Создание фрагментов и использование вкладок для Android - 19/11/2017 05:16
- SplashScreen в Android: пишем заставку - 18/08/2017 19:06
- Диалог в андроид: пишем приложение в Android Studio - 13/08/2017 11:27
- Intent - Android приложение с несколькими Activity - 17/06/2017 17:05
- Создание списка ListView и ArrayAdapter в Android Studio - 09/06/2017 20:38
- Используем SharedPreferences для android - 05/05/2017 18:01
- Toast в Android Studio: пишем приложение с сообщениями - 04/05/2017 17:38
- Приложение-браузер для android устройств - 03/03/2017 16:56