无法从 android 应用程序(通过模拟器)连接到本地 xampp 服务器上的 API

Unable to connect to API on local xampp server from android app (via emulator)

我有一个用 PHP 编写的简单 API 来与我的 MYSQL 数据库交互。 API returns 当我从模拟器中的浏览器调用它时的正确响应但是当它从代码完成时请求失败。

package com.example.studenthealthapp
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.result.Result
import org.json.JSONArray

class InfoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar?.hide()
    setContentView(R.layout.info_layout)

    val api_url =
        "http://10.0.2.2:80/HealthTracker/api.php?email=" + getIntent().getStringExtra("email")
    //Toast.makeText(this,api_url,Toast.LENGTH_LONG).show()

    Fuel.get(api_url).response { request, response, result ->

        when (result) {
            is Result.Success -> {
                //var data = JSONArray(String(response.data))
                //Toast.makeText(this,data.length().toString(),Toast.LENGTH_SHORT).show()
                Toast.makeText(this, "Worked", Toast.LENGTH_SHORT).show()
            }
            is Result.Failure -> {
                Toast.makeText(this, "Didnt work", Toast.LENGTH_SHORT).show()
            }
        }

      }
   }
}

我在调用 API 时尝试了我的 IP 地址和 10.0.2.2 都具有相同的结果。

我以前可能 运行 遇到过这个问题,您的解决方案可能有两种选择之一。我不推荐第一个,因为它为未来的项目树立了一个糟糕的先例。

  1. 第一个是允许“http://...”不带“s”,在您的应用程序清单中也称为明文流量。在 youtube 上快速搜索会得到一些过时的教程,这可能不是一个好兆头。
  2. 我的首选解决方案是从 Volley 切换到 Retrofit。它在 youtube 和网络文章中都有更好的 up-to-date 教程,并且更易于使用。这可能看起来像是从头开始,但您可以避免将来遇到很多麻烦。

祝你好运!