Всем привет, и это уже четвертая статья, посвященная работе в 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.

define('DB_SERVER', "localhost"); // сервер
define('DB_DATABASE', "user_info"); // база данных

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

define('DB_USER', "root"); //логин админа БД

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

define('DB_PASSWORD', ""); // пароль админа

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

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

$con = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);

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

mysqli_query($con, "set names utf8");

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

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

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

require 'db/config.php';

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

$sql_query = "SELECT * FROM `users`";

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

$r = mysqli_query($con, $sql_query);

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

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

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

echo (json_encode(array("users" => $data),JSON_UNESCAPED_UNICODE));

обратите внимание здесь я указал имя будущего массива 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

ArrayList< JSONObject> infoList;

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

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

ArrayList< JSONObject> listItems = getArrayListFromJSONArray(jsonArray);

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

infoList = listItems;

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

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

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

listView.setOnItemClickListener(new AdapterView.OnItemClickListener()

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

String nameEx = infoList.get(position).optString("name");

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

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

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

Intent intent = new Intent(getApplicationContext(),InfoActivity.class);

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

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

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

Добавим Android id

android:id="@+id/webView"

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

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

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

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

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

intent.putExtra("nameEx",nameEx);
intent.putExtra("emailEx",emailEx);

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

startActivity(intent);

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

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

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

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

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

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

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

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

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

  webView = findViewById(R.id.webView);

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

Intent intent = getIntent();

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

String nameEx = intent.getStringExtra("nameEx");
String emailEx = intent.getStringExtra("emailEx");

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

tmp = " Имя: " + nameEx + "< br>< br>" +" Email: " +emailEx + "< br>< br>"’

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

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

webView.loadData(tmp,"text/html; charset=utf-8",null);

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

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

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

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

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

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

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

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

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

String infoEx = infoList.get(position).optString("info");

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

intent.putExtra("infoEx",infoEx);

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

String infoEx = intent.getStringExtra("infoEx");

И добавим в tmp

tmp = " Имя: " + nameEx + "< br>< br>" +" Email: " +emailEx + "< br>< br>" + infoEx;

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

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

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

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

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

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

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

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

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

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

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


ZIP архив с проектом


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

 С уважением, авторы сайта Компьютерапия




Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Предыдущие статьи

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok