Всем привет и это уже третья статья и видео, посвященные работе в 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.
Добавим для видимости текст,
размер текста сделаем равным20sp
. Можно было не писать, можно было скопировать с предыдущего примерно, но напишу. То же самое и для поля 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
, сохраним и перезапустим.
Вот так, всего лишь одна небольшая функция и мы превратили абракадабру во вполне понятной вид.
Cкачать архив для ознакомления - Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3:
Полный текст AndroidManifest.xml
Полный текст activity_main.xml
Полный текст row.xml
Полный текст MainActivity.java
Полный текст ListViewAdapter.java
Смотрите видео: Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3
С уважением, авторы сайта Компьютерапия
Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!
Связанные статьи
Новые статьи
Предыдущие статьи
- Android Studio: получение JSON в ListView и ArrayAdapter. Урок № 2 - 04/12/2020 20:39
- 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