android - 为什么 10.0.2.2 在模拟器浏览器中有效,但在应用程序中无效?

标签 android kotlin okhttp

我有一个 Flask Restful 服务器,它给我一些 JSON。我尝试使用 okhttp 在我的应用程序中获取该 json,但它不起作用。它总是失败。我尝试使用 Wikipedia API,它可以工作。我的服务器在本地主机上运行,​​我在应用程序中使用 10.0.2.2。最奇怪的是 10.0.2.2 在模拟器浏览器中工作,它向我显示 JSON,但它在我的应用程序中不起作用。

这是在我的主要 Activity 中调用的方法:

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)
        }
    })
}

它总是打印“执行失败”

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

最佳答案

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

Android 8: Cleartext HTTP traffic not permitted

关于android - 为什么 10.0.2.2 在模拟器浏览器中有效,但在应用程序中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333606/

相关文章:

android - android中sql事务失败后到底发生了什么?

android - 为什么 AsyncPagingDataDiffer submitData() 应该卡住和超时测试?

java - 改造2 : Post multiple files with part names along with @FormUrlEncoded formData

java - 如何解决 android b.a.a.b 超时错误?

gradle - 带有OkHTTP的 picasso 无法在其URL中加载包含竖线字符( “|”)的图像

android - 为什么要使用操作栏?

android - 如何在警报对话框中设置文本消息的位置

java - 使用 Android 的基于标记的增强现实模型查看器

android - 无法在 Jetpack Compose 中创建按钮

spring - 使用Spring HATEOAS ControllerLinkBuilder和Kotlin会引发IllegalArgumentException