Android 应用程序与本地 apache 服务器通信
Android app communication with local apache server
我是 Android 开发人员的新手,我已经开始使用 Android Studio 和 Kotlin 几天了。我 运行 今天遇到一个问题:我的应用程序如何与本地服务器通信(XAMPP:Apache 和 MYSQL)
我 运行ning Windows 10,并使用我的真实物理 phone 而不是模拟器 (API 30),因为模拟器对我来说太慢了。
我有一个简单的 php 应用程序,只有 returns“嗨”,我尝试了很多方法来使用 AJAX 请求,但最接近工作的是 Android 排球,这是我的代码:
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,因为我们连接到同一个 wifi(热点),因为我实际上可以在 phone 的浏览器中打开我的本地主机,但它在代码中不起作用. (我有一个错误:java.net.MalformedURLException: no protocol
),我环顾四周,读到 Volley 不支持 IP 地址,所以我使用 PAGEKITE 使我的本地主机可以通过可读 link 访问互联网,但是现在我收到此错误:
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) ?
这让我很困扰,因为如果我不能与我的本地主机通信,我还能如何使用数据库制作应用程序?使用我的真实虚拟主机会减慢开发过程,我无法解决这个问题。您如何使用本地服务器开发和测试您的应用程序,还是我做错了?
编辑:我的应用程序的目的是能够登录并read/edit来自任何设备的一些数据。
已解决:我忘记在 network_security_config.xml
中添加我的 URL
<domain includeSubdomains="true">192.168.56.172</domain>
现在它适用于我的 IP 地址或我的 URL。
我是 Android 开发人员的新手,我已经开始使用 Android Studio 和 Kotlin 几天了。我 运行 今天遇到一个问题:我的应用程序如何与本地服务器通信(XAMPP:Apache 和 MYSQL) 我 运行ning Windows 10,并使用我的真实物理 phone 而不是模拟器 (API 30),因为模拟器对我来说太慢了。
我有一个简单的 php 应用程序,只有 returns“嗨”,我尝试了很多方法来使用 AJAX 请求,但最接近工作的是 Android 排球,这是我的代码:
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,因为我们连接到同一个 wifi(热点),因为我实际上可以在 phone 的浏览器中打开我的本地主机,但它在代码中不起作用. (我有一个错误:java.net.MalformedURLException: no protocol
),我环顾四周,读到 Volley 不支持 IP 地址,所以我使用 PAGEKITE 使我的本地主机可以通过可读 link 访问互联网,但是现在我收到此错误:
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) ?
这让我很困扰,因为如果我不能与我的本地主机通信,我还能如何使用数据库制作应用程序?使用我的真实虚拟主机会减慢开发过程,我无法解决这个问题。您如何使用本地服务器开发和测试您的应用程序,还是我做错了?
编辑:我的应用程序的目的是能够登录并read/edit来自任何设备的一些数据。
已解决:我忘记在 network_security_config.xml
<domain includeSubdomains="true">192.168.56.172</domain>
现在它适用于我的 IP 地址或我的 URL。