为什么10.0.2.2可以在模拟器浏览器中但不能在应用程序中运行?

时间:2019-01-23 18:35:21

标签: android kotlin okhttp3

我有一个Flask Restful服务器,它提供了一些JSON。我尝试使用okhttp在我的应用程序中获取该json,但是它不起作用。它总是失败。我尝试使用Wikipedia API,它可以正常工作。我的服务器在localhost上运行,我在应用程序中使用10.0.2.2。最奇怪的是10.0.2.2在模拟器浏览器中可以正常工作,它向我显示了JSON,但在我的应用程序中却无法正常工作。

这是我主要活动中调用的方法:

fun fetchJson() {
    val url = "http://10.0.2.2:5000/users"

    val request = Request.Builder().url(url).build()
    println(request.url())

    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback {
        override fun onFailure(call: Call, e: IOException) {
            println("Failed to execute")
        }

        override fun onResponse(call: Call, response: Response) {
            val body = response.body()?.string()
            println(body)
        }
    })
}

它总是打印“执行失败”

注意::我在清单中添加了INTERNET权限。

1 个答案:

答案 0 :(得分:0)

@Xvolks建议打印异常有所帮助。这是因为在API级别28中,明文支持被禁用。这是对我有帮助的答案:

Android 8: Cleartext HTTP traffic not permitted