|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|||||||||||||||||||||
Работа из приложения Android с БД MySQL на хостинге07.05.2023, 11:06. Показов 2730. Ответов 14
Метки нет (Все метки)
Всем привет.
В общем бьюсь уже три дня над следующей проблемой и никак не выходит камушек гранитный. Есть написанное мной веб-приложение, соответственно, чтобы к нему подключиться необходимо ввести логин и пароль, которые хранятся в БД MySQL. Появилась такая необходимость заходить в это приложение через мобильное устройство на базе ОС Android, ранее разработкой в данной ОС никогда не занимался. Казалось бы ничего сложного, но упорно не получается подключиться к БД. Перепробовал уже 4 или 5 способов, включая RestAPI, volley и ещё какие-то, в том числе этот, код которого выложил. Чтобы доступ к приложению был в интернете расположил свое веб-приложение на хостинге beget.com. Соответственно с любого браузера всё работает. Точной причины проблемы не понимаю, но есть предположение, что виной хостинг и необходимо делать дополнительные настройки, возможно я ошибаюсь. Точно помню, что при подключении через библиотеку volley в Logcat Android Studio была ошибка 403, при подключении методом RestApi не находился файл java.io.FileNotFoundException, с этим методом вообще ошибок вроде как нет, возможно он не работает. Проверять все подключения локально или как на примерах смысла нет, есть уже готовое решение в конкретном домене, к которому необходимо получить доступ. Нужен совет или верные мысли, как решить проблему, можно совет на надежную и простую библиотеку для этих целей на текущий момент. И вообще может ли быть проблема с хостингом? Мне почему-то кажется, что никаких проблем быть не должно, что же я тогда не догоняю и делаю не так? MainActivity.java
plugins { id 'com.android.application' } android { namespace 'com.example.conndb' compileSdk 33 useLibrary 'org.apache.http.legacy' packagingOptions { pickFirst 'META-INF/*' } defaultConfig { applicationId "com.example.conndb" minSdk 22 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner " } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1. 9.0' implementation 'androidx.constraintlayout:constraintlay out:2.1.4' implementation 'org.apache.httpcomponents:httpcore:4.4. 15' implementation 'org.apache.httpcomponents:httpclient:4. 5' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' } Ну и небольшой лог, касаемый работы данного способа из LogCat: 2023-05-07 16:28:28.686 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=500.30ms min=499.77ms max=500.82ms count=2 2023-05-07 16:28:30.186 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=27.08ms min=12.70ms max=499.67ms count=55 2023-05-07 16:28:31.686 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=499.89ms min=499.04ms max=500.32ms count=3 2023-05-07 16:28:32.702 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=507.81ms min=502.68ms max=512.95ms count=2 2023-05-07 16:28:33.703 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=500.20ms min=498.07ms max=502.33ms count=2 2023-05-07 16:28:34.771 12947-12947 OnBackInvokedCallback com.example.conndb W OnBackInvokedCallback is not enabled for the application. Set 'android:enableOnBackInvokedCallback="tr ue"' in the application manifest. 2023-05-07 16:28:34.774 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=356.85ms min=71.74ms max=500.11ms count=3 2023-05-07 16:28:34.784 12947-12947 InsetsController com.example.conndb D show(ime(), fromIme=true) 2023-05-07 16:28:35.787 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=45.76ms min=14.77ms max=499.37ms count=22 2023-05-07 16:28:37.286 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=43.92ms min=14.61ms max=499.74ms count=34 2023-05-07 16:28:38.291 12947-12973 EGL_emulation com.example.conndb D app_time_stats: avg=502.35ms min=498.15ms max=506.55ms count=2
0
|
|||||||||||||||||||||
| 07.05.2023, 11:06 | |
|
Ответы с готовыми решениями:
14
Mysql для android приложения на unity3d Подключение к MySql из консольного приложения (Android приложение C# Shell из Play Market) Работа приложения на C# с MySQL |
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
|
| 07.05.2023, 14:12 | |
|
Я не спец в андроид, сам запарился с этими активностями и потоками, но посмотрите что происходит на сервере в момент попытки подключения с клиента андроид.
Эта попытка вообще происходит? Сделайте вывод каких-то переменных в скрипте enter.php через эхо, print_r ну и включеите опцию отображения всех ошибок в php.ini The java.io.FileNotFoundException is a checked exception that occurs when a file or resource specified by a given path is not found. In the provided code snippet, the exception can occur in the following line: HttpResponse response = client.execute(request); This exception indicates that the server returned a response with a status code indicating that the requested resource (in this case, a file) was not found. It could be due to various reasons, such as an incorrect URL or the server not hosting the file at the specified location. To troubleshoot this issue, you can perform the following steps: Verify the URL: Double-check the URL http://namedomain.beget.tech/enter.php?username="+username+"& password="+password to ensure it is correct. Make sure it points to the correct file or resource on the server. Test the URL in a web browser: Manually try accessing the URL in a web browser to see if it returns the expected content. If it doesn't and shows a 404 error or a similar message, it confirms that the file or resource is not available at the specified location. Check server configuration: If you have control over the server hosting the file, ensure that the file is present at the correct path and that the server is correctly configured to serve the file. Debug the server-side code: If you have access to the server-side code (e.g., enter.php), check for any issues that might cause the file not to be found. Verify that the file exists in the expected location and that the server-side code is correctly handling the request. By troubleshooting these areas, you should be able to identify and resolve the FileNotFoundException issue. android:enableOnBackInvokedCallback="tru e"> в манифест, чтобы это убрать: OnBackInvokedCallback com.example.conndb W OnBackInvokedCallback is not enabled for the application. Set 'android:enableOnBackInvokedCallback="tr ue"' in the application manifest.
0
|
|
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|
| 07.05.2023, 15:05 [ТС] | |
|
Я вроде бы подбираюсь к истине, но точно пока сказать не могу. Нашёл ещё один метод, который кстати с первой попытки импорта в новый проект не выдал ни одной ошибки и запустился с первого раза без танцев с бубном. Кстати опубликованный относительно недавно в 2021 году, хотя и содержит в себе уже устаревшие методы.
Так вот, Logcat на этот раз выдал следующее: java.io.IOException: Cleartext HTTP traffic to namedomain.beget.tech not permitted я так понимаю, что до хостинга приложение достукивается, но ответ в открытом виде хостинг не возвращает. А, если так, то каким образом я должен понимать, произошла ли допустим авторизация? В общем сижу пока изучаю это дело. По поводу БД, я пока даже к ней не подключаюсь, сделал обычный php-макет с возвратом от него результата, т. е. в поле логин и пароль отправляю на сервер данные и жду ответа. Но как вы поняли даже с этим пока беда. Добавлено через 19 минут Вот что выдаёт Logcat: 2023-05-07 20:38:24.062 23231-23257 EGL_emulation com.example.conndb_2 D app_time_stats: avg=500.87ms min=500.77ms max=500.98ms count=2 2023-05-07 20:38:24.208 23231-23275 System.err com.example.conndb_2 W java.io.IOException: Cleartext HTTP traffic to namedomain.beget.tech not permitted 2023-05-07 20:38:24.208 23231-23275 System.err com.example.conndb_2 W at com.android.okhttp.HttpHandler$Cleartext URLFilter.checkURLPermitted(HttpHandler. java:127) 2023-05-07 20:38:24.208 23231-23275 System.err com.example.conndb_2 W at com.android.okhttp.internal.huc.HttpURLC onnectionImpl.execute(HttpURLConnectionI mpl.java:462) 2023-05-07 20:38:24.209 23231-23275 System.err com.example.conndb_2 W at com.android.okhttp.internal.huc.HttpURLC onnectionImpl.connect(HttpURLConnectionI mpl.java:131) 2023-05-07 20:38:24.209 23231-23275 System.err com.example.conndb_2 W at com.android.okhttp.internal.huc.HttpURLC onnectionImpl.getOutputStream(HttpURLCon nectionImpl.java:262) 2023-05-07 20:38:24.210 23231-23275 System.err com.example.conndb_2 W at com.example.conndb_2.BackgroundWorker.do InBackground(BackgroundWorker.java:40) 2023-05-07 20:38:24.210 23231-23275 System.err com.example.conndb_2 W at com.example.conndb_2.BackgroundWorker.do InBackground(BackgroundWorker.java:20) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at android.os.AsyncTask$3.call(AsyncTask.ja va:394) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at java.util.concurrent.FutureTask.run(Futu reTask.java:264) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:305) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1137) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:637) 2023-05-07 20:38:24.211 23231-23275 System.err com.example.conndb_2 W at java.lang.Thread.run(Thread.java:1012) 2023-05-07 20:38:24.398 23231-23257 Parcel com.example.conndb_2 W Expecting binder but got null! Добавлено через 25 минут В конфиг файл сетевой безопасности прописал пару настроек и теперь он стал выдавать следующее: 2023-05-07 21:03:13.973 25157-25212 TrafficStats com.example.conndb_2 D tagSocket(66) with statsTag=0xffffffff, statsUid=-1 2023-05-07 21:03:14.198 25157-25212 System.err com.example.conndb_2 W java.io.FileNotFoundException: http://namedomain.beget.tech/validateData.php 2023-05-07 21:03:14.198 25157-25212 System.err com.example.conndb_2 W at com.android.okhttp.internal.huc.HttpURLC onnectionImpl.getInputStream(HttpURLConn ectionImpl.java:255) 2023-05-07 21:03:14.198 25157-25212 System.err com.example.conndb_2 W at com.example.conndb_2.BackgroundWorker.do InBackground(BackgroundWorker.java:58) 2023-05-07 21:03:14.198 25157-25212 System.err com.example.conndb_2 W at com.example.conndb_2.BackgroundWorker.do InBackground(BackgroundWorker.java:20) 2023-05-07 21:03:14.199 25157-25212 System.err com.example.conndb_2 W at android.os.AsyncTask$3.call(AsyncTask.ja va:394) 2023-05-07 21:03:14.199 25157-25212 System.err com.example.conndb_2 W at java.util.concurrent.FutureTask.run(Futu reTask.java:264) 2023-05-07 21:03:14.200 25157-25212 System.err com.example.conndb_2 W at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:305) 2023-05-07 21:03:14.200 25157-25212 System.err com.example.conndb_2 W at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1137) 2023-05-07 21:03:14.200 25157-25212 System.err com.example.conndb_2 W at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:637) 2023-05-07 21:03:14.201 25157-25212 System.err com.example.conndb_2 W at java.lang.Thread.run(Thread.java:1012) 2023-05-07 21:03:14.239 25157-25183 Parcel com.example.conndb_2 W Expecting binder but got null!
0
|
|
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
|
| 08.05.2023, 22:17 | |
|
Да с андроидом все оказалось не так просто. Там переброска данных между потоками, активностями, вобщем, чёрт ногу сломит.
Можете, кстати, для отладки вставлять строку System.out.printf("your message %format \n", variable); Формат это s - для строки (string), d для десятичного числа, все зависит что в переменной variable, которую выводите. Иногда очень помогает. Сам под него никогда не писал, и вот тоже возникла необходимость. Уже намучился конкретно. Еще предстоит авторизация, но у меня Си и база postgre, ещё толком не знаю как построить структуру алгоритма. Я использую сокеты у вас http запросы на сколько я понял, через скрипты php, потому подсказать могу не всё и то только гуглением, когда есть возможность. Как по мне, то на сокетах даже немного проще. На php тоже вроде есть возможность сокет соединение завести, если я не ошибаюсь. По ошибкам, проверьте следующее: В манифесте естественно есть <uses-permission android:name="android.permission.INTERNE T" />? Ошибка "java.io.IOException: Cleartext HTTP traffic to namedomain.beget.tech not permitted" указывает на то, что ваше приложение пытается установить незащищенное (незашифрованное) соединение HTTP с сервером namedomain.beget.tech, но это не разрешено по умолчанию. В новых версиях Android (начиная с Android 9), по умолчанию запрещен незащищенный сетевой трафик HTTP (cleartext) для повышения безопасности. Таким образом, если ваше приложение пытается установить незашифрованное соединение HTTP, оно будет блокировано, и вы получите указанную ошибку. Есть несколько способов решить эту проблему: Рекомендуется использовать защищенное соединение HTTPS вместо HTTP, если это возможно. Запросы к серверу должны использовать URL-адреса, начинающиеся с https:// вместо http://. Если вам необходимо использовать незащищенное соединение HTTP, вы можете разрешить незащищенный трафик в вашем приложении. Для этого вам нужно добавить следующую строку в файл манифеста вашего приложения, внутри секции <application>: xml <application ... android:usesCleartextTraffic="true" ...> ... </application>
0
|
|
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|||||||||||
| 09.05.2023, 07:09 [ТС] | |||||||||||
|
Друзья, спасибо всем, кто помогает.
Строка <uses-permission android:name="android.permission.INTERNE T" /> есть, без неё никуда. На счет http:// и https:// я понял на предыдущем этапе, поэтому строку android:usesCleartextTraffic="true" в манифест добавил, но результат абсолютно не изменился и в LogCat как выдавал: java.io.IOException: Cleartext HTTP traffic to namedomain.beget.tech not permitted, так и выдаёт. С годами правила ужесточились это и понятно, отсюда на видео примерах 6-7 летней давности работы android с доменами люди обращались к php по незащищенным протоколам http:// и у них всё работало, теперь судя по всему нет. Вот и возник вопрос, а как же быть сегодня или теперь всё нацелено только на профессиональных разработчиков, т. е. компании по созданию ПО, которые оплачивают https://, а все остальные идите лесом или наслаждайтесь локальной работой внутри собственной сети? Добавлено через 2 часа 15 минут Ну вот, до php я достучался, только теперь не пойму, как передаются туда данные. Метод указан, как POST, но при попытке считывания массива и возврата ответа, например user_name я получаю ошибку Notice: undefined index. Кстати весь код пришлось пересточить, кое что добавить в манифест и сетевые настройки. MainActivity.java
Если кто увидит косяк в коде, пожалуйста ткните меня в него. Я пока не понимаю в чем проблема, почему данные в скрипте php не могу получить через array() или $_POST['user_name'], всё пусто. Пока искал решение, как по http:// достучаться до скриптов, совсем перестал соображать .
0
|
|||||||||||
|
|
|||
| 09.05.2023, 07:39 | |||
|
Пишут WebAPI , REST API и т.п., за которыми скрывают работу с БД. А это API доступно по https. Можно на хостинге настроить автоматическое получение этих сертификатов и пользоваться бесплатно https.
1
|
|||
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
||
| 09.05.2023, 09:00 [ТС] | ||
|
Я могу, конечно профессионалов понять, не хотят они все свои секреты раскрывать по понятным причинам, но и не нужно этого делать, вы делитесь с сообществом деталями, а кто способен детали собрать в целый механизм, значит будет достойным конкурентом, кто не способен, тот сам отсеется. Добавлено через 1 час 6 минут Фух, всё разобрался. 5 дней работы по простейшей функции авторизации на сайте через php-скрипт из приложения Android, однако
0
|
||
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
|
| 09.05.2023, 09:09 | |
|
Rius,
У него не голой жо, а за php. Авот на пхп нужен и сертификат. Проблема что андроид не хотел работать по http. VKont, вы аж заинтриговали. Проблема, думаю была на стороне пхп?
0
|
|
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|||||||||||||||||||||||||||||||
| 09.05.2023, 09:25 [ТС] | |||||||||||||||||||||||||||||||
|
В общем целая инструкция для следующего поколения разработчиков
![]() Помимо правильного кода и метода по подключению к реальному домену, нужно выполнить ещё ряд функций, о которых я прямого указания нигде в интернете не нашёл. Поэтому внимательно выполняем следующее: 1. AndroidMinfest.xml
2. Network_security_config.xml
3. activity_main.xml
Вполне возможны другие более простые решения, но сколько я их искал, в сети попадались только старые способы, которые в настоящее время у меня не работали. Предстоит дальше разбираться с поддержанием сеанса из android или как там оно осуществляется для работы с БД. В общем всем спасибо, если что, пока разбираюсь окончательно с полным взаимодействием приложений android и сервера пишите здесь, делитесь своими наработками, я в свою очередь буду делиться своими.
0
|
|||||||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
|
| 09.05.2023, 10:15 | |
|
Вот рабочий пример клиента и сервера на андроид и джава соответственно. На сокетах.
http://https://java-online.ru/android-socket.xhtml Клиент проверял лично. Сервер этот когда-то давно ковырял на джаве. Не помню что там у него с работоспособностью. Мне бы было интересно как у вас устроен механизм авторизации в бд, т.е. Например, есть поля с именем и паролем в базе, скрипт пхп ищет по полю клиент, сравнивает хеш пароля с хешем который лежит в базе и соответствует этому клиенту? Если совпадает, авторизация успешна, приложение продолжает работу?
0
|
|
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|
| 09.05.2023, 10:19 [ТС] | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
||
| 18.05.2023, 16:23 | ||
|
Так а разве php такое умеет? Он ведь скрипт отработал и всё, потом снова подключайся. Это разве что перед каждой отправкой проверять соединение, и если отпало поднимать снова.
0
|
||
|
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
|
|
| 19.05.2023, 00:48 [ТС] | |
|
Доброго дня. У меня пока не возникло проблем с работой приложения android с БД через php. Да, действительно всё работает также, как обычно, подлючаешься к php-скрипту, устанавливаешь подключение, производишь манипуляции с БД, закрываешь соединение.
0
|
|
|
93 / 66 / 27
Регистрация: 23.06.2019
Сообщений: 483
|
|
| 19.05.2023, 11:37 | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 08.01.2023
Сообщений: 38
|
|
| 19.05.2023, 16:35 | |
|
Да кто ж его знает.
Я проверил, работает, но под переделку не подошло, запутался, пришлось писать с нуля.
0
|
|
| 19.05.2023, 16:35 | |
|
Помогаю со студенческими работами здесь
15
Работа программистом приложения на Android (г. Одинцово) Работа unity приложения при сворачивании и отключении экрана Android
Delphi+MySQL на хостинге На хостинге не работает MySQL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|