Я новичок в разработке Android, я начал использовать Android Studio с Kotlin несколько дней. Сегодня я столкнулся с проблемой: как мое приложение может взаимодействовать с моим локальным сервером (XAMPP: Apache и MYSQL) Я использую Windows 10 и использую свой реальный физический телефон вместо эмулятора (API 30), так как эмулятор у меня работает очень медленно.
У меня есть простое php-приложение, которое возвращает только «привет», я пробовал много способов использовать запросы AJAX, но наиболее близким к работе с ним является Android Volley, вот мой код:
val queue = Volley.newRequestQueue(this)
val url = "http://mohe.pagekite.me"
lateinit var qq : String
val stringRequest = StringRequest(
Request.Method.GET, url,
{ response ->
qq = "Response is: ${response.substring(0, 500)}"
val toast = Toast.makeText(applicationContext, qq, Toast.LENGTH_LONG)
toast.show()
},
{ error-> qq = error.toString()
val toast = Toast.makeText(applicationContext, qq, Toast.LENGTH_LONG)
toast.show()
})
queue.add(stringRequest)
сначала я использовал свой IP-адрес, так как мы подключены к одному и тому же Wi-Fi (точке доступа) и поскольку я действительно могу открыть свой локальный хост в браузере своего телефона, но внутри кода это не сработало. (У меня была ошибка: java.net.MalformedURLException: no protocol), я осмотрелся и прочитал, что Volley не поддерживает IP-адреса, поэтому я использовал PAGEKITE, чтобы сделать свой локальный хост доступным для Интернета с читаемой ссылкой, но теперь вместо этого я получаю эту ошибку:
cleartext http traffic to not permitted
Я добавил это android:usesCleartextTraffic = "true" в свой manifest.xml и создал network_security_config.xml:
<?xml version = "1.0" encoding = "utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted = "true">
<base-config cleartextTrafficPermitted = "true"/>
<domain includeSubdomains = "true">api.example.com(to be adjusted)</domain>
<trust-anchors>
<certificates src = "system" />
</trust-anchors>
</domain-config>
</network-security-config>
Но проблема все та же. Я попробовал то же самое с google.com, также я попробовал свой php-файл, но на своем веб-хостинге, и он работал нормально, поэтому я предполагаю, что проблема где-то в моем локальном хосте, вероятно, потому, что я не использую безопасное соединение (https) ?
Это беспокоило меня, потому что как еще я мог бы создать приложение с базой данных, если я не могу использовать свой локальный хост? использование моего реального веб-хостинга замедляет процесс разработки, и я не могу решить эту проблему. Как вы разрабатываете и тестируете свое приложение на локальном сервере, или я все делаю неправильно?
Редактировать: цель моего приложения - иметь возможность войти в систему и читать/редактировать некоторые данные с любого устройства.
Поскольку в конфигурации сети установлено значение cleartextTrafficPermitted=true, с http все должно быть в порядке. Не беспокойтесь об этом. Раньше я подключался таким образом некоторое время назад, большую часть времени брандмауэр ПК или система безопасности блокировали доступ к портам вашего ПК. Поскольку вы оба подключены к одному и тому же Wi-Fi, отключите любой брандмауэр или интернет-безопасность и попробуйте вызвать один и тот же API. Не забудьте изменить значение узла домена на локальный IP-адрес вашего компьютера (192...)
@SreehariK да, это решено, я уже опубликовал свое решение в качестве ответа






Решено: я забыл добавить свой URL в network_security_config.xml
<domain includeSubdomains = "true">192.168.56.172</domain>
Теперь он работает как с моим IP-адресом, так и с моим URL-адресом.
Эта проблема решена?