Почему 10.0.2.2 работает в браузере эмулятора, а не в приложении? - PullRequest
0 голосов
/ 23 января 2019

У меня есть сервер с колбой, который дает мне JSON.Я пытаюсь использовать Okhttp, чтобы получить этот JSON в моем приложении, но это не работает.Это всегда терпит неудачу.Я попробовал с API Википедии, и это работает.Мой сервер работает на локальном хосте, и я использую 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)
        }
    })
}

Всегда печатается «Не удалось выполнить»

Примечание: Я добавил разрешение ИНТЕРНЕТ в манифест.

1 Ответ

0 голосов
/ 24 января 2019

@ Предложение Xvolks для печати исключения помогло. Это произошло потому, что на уровне API 28 поддержка открытого текста отключена. Вот ответ, который мне помог:

Android 8: HTTP-трафик в открытом тексте запрещен

...