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。