Android studio json request

Урок 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 всё в порядке:

Источник

Учебник по 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 в RecyclerView и CardView. Урок № 1

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

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

Читайте также:  Зависает при загрузке android

Смотрите видео: 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 и 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.

Читайте также:  Панель навигации андроид apk

Для 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 получим содержимое файла

Источник

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/ , надо будет указать вот этот адрес.

Читайте также:  Wps office убрать рекламу андроид

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

В принципе всё уже готово, значит вот так выглядит теперь мой адрес, у вас это будет ваш 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.

Источник

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