Json для андроид студио

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 мы будем пробегать по-нашему массиву ну и соответственно

Источник

Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3

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

Из этой статьи вы узнаете как в android studio получать данные из JSON в ListView с сервера на хостинге.

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

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

Надеюсь видео вам понравится, можете пока создается новый проект поставить пальцы вверх, подписаться на канал, и мы приступаем.

Читайте также:  Хонор 10 лайт обновиться до андроид

Смотрите видео: 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 , и в принципе больше у нас ни каких нюансов быть не должно… А они будут…)

Читайте также:  How to install android sdk in android studio

Сохраняем, запускаем… Эмулятор запустился, и мы получили данные…

Поскольку наш файл вряд ли был в кодировке 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 , сохраним и перезапустим.

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

Источник

Android Studio: получение JSON из базы данных с помощью PHP. Урок № 4

Всем привет, и это уже четвертая статья, посвящення работе в Android Studio при создании приложений с использованием JSON.

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

Смотрите видео: Android Studio: получение JSON из базы данных с помощью PHP. Урок № 4.

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

На localhost была создана база данных user_info с таблицей users , в которой содержатся всё те же наши пользователи, добавлена колонка info , чуть позже будем ее использовать.

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

Сразу хочу напомнить, что получать значение будем UTF-8, и поскольку у нас в базе данных в структуре текст уже в кодировке utf8, таблица дает правильные данные, поэтому перед началом написания, а вы будете использовать пример из-за третьего урока, или третьего видео, функцию EncodingToUTF8 нужно будет убрать.

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

Создаем текстовой файл, с названием config.php , и откроем его в редакторе.

Давайте ещё добавил здесь на этом уровне один файл, создать- текстовый файл info.php , и тоже откроем его.

По сути создание файлов закончено, поработаем с PHP и немного с Android Studio.

Давайте начнем, поскольку мы работаем с localhost все обращения к базе данных у нас будут без паролей, мы объявляем define константу DB_SERVER со значением localhost , наш сервер, далее укажем базу данных DB_DATABASE , если вас реально хостинг имя базы данных может отличаться, в моем примере user_info .

На localhost DB_USER почти всегда равен root, в вашем случае на хостинге укажите логин, который вы получаете от вашего хостера.

Здесь DB_PASSWORD пароль на localhost, чаще всего он пустой, на хостинге указываете свой.

Далее объявляем переменную $con — сокращённо от connaction, и далее вызываем mysqli_connect , делаем соединение, тут я не делаю никаких проверок на ошибки, будем считать, что у нас всё правильно, как бы хотите заморачиваться – пишите.

Пока я показываю простой пример, обратите внимание если версия PHP старше 5.4 то используйте mysqli_ , в устаревшей версии до 5.4 там указывалось mysql_ , без буквы i, в этом подключение перечислены сервер, база данных, пользователь, пароль.

И ещё одна строчка, мы укажем, что у нас подключение будет работать в utf-8.

Закройте скобки, если хотите закрывайте, config.php мы сделали.

Теперь мы перейдём в файл info.php , можете спорить, писать в комментариях, что лучше использовать require_once , я оставлю так.

Подключаем файл конфигурации

в переменную $sql_query помещаем sql-запрос, который выведет все данные из таблицы users

Далее в переменную $r — результат запрос помещаем с учетом нашего соединения

после объявляем массив $data = array();

И в такой цикле с условием пробегаемся по записям, если записи есть, ведется подсчет количества строк, то в цикле while мы заполняем переменную $row из $r в виде ассоциативного массива и передадим в другой массив $data[] .

Теперь мы выведем через echo наши данные,

обратите внимание здесь я указал имя будущего массива users .

Передаем данные и константа JSON_UNESCAPED_UNICODE нужна для работой с кириллицей, у нас будет давать правильные результаты, мы всё это получаем в читабельном виде.

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

В принципе всё то же самое как у нас было с локальным файлам.

Значит запомнили, создали базу данных, в ней таблицу, наполнили её данными, данные должны быть в кодировке utf-8 , но я вот это использую utf8_general_mysql500_ci, как бы я по привычке ее использую.

Вот значит у нас ответ есть, теперь по поводу Android Studio. Здесь нам нужно будет указать, так в можно уже блокнот закрывать.

Дайте я просто покажу, чтобы знали, или вспомнили, если вы используете OpenServer, то вы указываете домен, в котором вы хотите работать в своей локальной сети, указываете ip компьютера.

Как его определить, через команду cmd, и в ней ipconfig, то есть у вас здесь должен быть локальный адрес вашего компьютера.

Читайте также:  Расписание автобусов для андроида

И нужно будет указать в настройках OpenServer адрес и домен, и вместо пути, как их здесь было m1.maxfad.ru/ , надо будет указать вот этот адрес.

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

В принципе всё уже готово, значит вот так выглядит теперь мой адрес, у вас это будет ваш ip вместо домена, естественно, если php файлы и база данных у вас на хостинге, укажите свой путь к файлу info.php.

Значит нам можно будет в MainActivity объявить еще arraylist

назовем его infoList , в нем будем информацию собирать.

Значит нам нужно будет вставить в функцию LoadJSONFromURL , вот сюда, после строки

напишем infoList равно listItems

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

Теперь перейдём в onCreate , под loadJSONFromURL(JSON_URL)

Нам нужно будет, в onCreate написать обработчик нажатия на пункт нашего списка, который у нас соответственно listView .

Сформировался обработчик, теперь объявим здесь переменную типа String nameEx , для экспорта будет, напишем

В листе определяем нажатую позицию, команда optString вернет значение указанное в скобках.

Продублируем то же самое для e-mail , пока показываю на простых примерах.

Теперь давайте вызовем intent

intent равно new Intent getapplicationcontext и вот здесь нас пока ждет засада.

Давайте создадим в проекте новую активность, назовём её InfoActivity , она будет нужна для вывода информации.

В дизайне activity_info.xml добавим WebView , наши данные, наш текст мы будем выводить всё webview .

Добавим Android id

всё больше мы ничего не делаем.

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

Я уже проверял, поэтому можете мне на слово поверить.

Так значит из MainActivity теперь мы обратимся к нашей InfoActivity.class .

Теперь мы вызываем intent.putExtra , передача переменной в другую активность или фрагмент через специальное ключ-имя nameEx , и то же самое для почты emailEx .

Ну и запуск активности через интент.

Так хорошо, давайте кстати проверим вообще работает ли у нас что-либо, не будем делать клик по пунктам.

Вытяну эмулятор с левого экрана, запусти приложение и посмотрим, что у нас вообще получится.

Так хорошо, есть, а вот я даже успел по ошибке кликнуть на пункт, чтобы вы убедились, что InfoActivity открывается.

Чтобы убедиться, что в эмуляторе действительно данные берутся из базы а не из локального json файла, давайте вставим еще одно имя допустим Андрей, email случайный, и нажмем кнопку Вперед.

В таблице новый пункт, если мы сейчас опять или можете, перезагрузить веб страничку, ещё один пользователь добавился.

Перезапустим эмулятор, вот у нас ещё один добавился юзер. Так давайте теперь пока уберём эмулятор, работаем в InfoActivity .

Нужно будет получить данные, которые мы передаем через интент.

Объявим переменную WebView webview , для работы с нашими данными, мы там будем соединять одно с другим, объявим ещё переменную tmp .

В onCreate объявим присвоение переменной webview и элемента WebView через findviewbyid

Объявляем опять Intent intent равно getIntent

Переменная String для получения переданного значения для name и email через getStringExtra

И теперь в переменную tmp мы поместим, давайте так напишем,

И вот у нас получается вот такая конструкция.

Поместим текст в webview

Вот и всё, так запускаем, проверяем.

У нас в принципе в базе осталось еще одно поле info , мы можем его тоже вывести, давайте заполним его, у нас пять записей, перейдём на сайт fishtext.ru, сформируем пять абзацев для каждого пользователя.

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

Допустим этот досье и в принципе можно сделать на основе этого какой-то справочник, допустим медицинский, может быть у вас тут описание.

Очень удобный этот сайт мне он нравится fishtext.ru, можно случайную информацию сгенерировать для наглядности.

Если не пытаться читать, то выглядит нормально, когда надо для примера, для чего-то набить.

Так значит теперь обновим в браузере, у нас добавлялась информация.

Добавим в MainActivity ещё одну переменную, по сути их две получится, так про дублируем,

здесь у нас будет инфо

Передаем и в интент

Нам нужно будет принять info , соответственно в InfoActivity .

И добавим в tmp

Запускаем смотрим, так Вася, Коля, null. Почему сейчас разберемся. Опечатка была, вот такое вот досье на каждого пользователя.

Давайте на Коле проведём испытания, давайте возьмём текст, который у нас здесь, мы же можем его представить в виде HTML, скопируем, оформить наш текст как HTML, с помощью тегов.

Можем раздробить на параграфы, если мы просто будем ставить разрывы строк через тег br , то не аккуратно получится, а так можно с помощью HTML разметки получше сделать.

Какой-то текст сделаем жирным, и какое-нибудь слово сделаем с наклоном.

Внизу сделаем список, через теги ul и li .

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

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

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

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

Сейчас всё крутится в одном так сказать месте, в одной активности со списком, можно будет сделать фрагменты, сделать, например, рубрики, или раздел музыки, допустим жанр, рок, к примеру, будет название может быть группы название, по клику можно вызывать дискографию, допустим вставить сюда картинку, что-нибудь такое ещё сделаем.

Cкачать архив для ознакомления — Android Studio: получение JSON из базы данных с помощью PHP. Урок № 4:

Смотрите видео: Android Studio: получение JSON из базы данных с помощью PHP. Урок № 4.

Источник

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