Всем привет, и это уже четвертая статья, посвященная работе в 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.
С уважением, авторы сайта Компьютерапия
Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!
Предыдущие статьи
- Android Studio: получение JSON в ListView с сервера на хостинге. Урок № 3 - 04/12/2020 21:46
- 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