【问题标题】:How can I handle okhttp connection failed in kotlin android studio如何在 kotlin android studio 中处理 okhttp 连接失败
【发布时间】:2022-08-23 23:44:22
【问题描述】:

我在 Kotlin 中使用 okHttp,但是当服务器未运行时,它会引发异常并使我的应用程序崩溃。我想

E/AndroidRuntime: 致命异常: Thread-5 进程:com.mkapps.cvgen,PID:24497 java.io.IOException: 意外代码响应{protocol=http/1.1, code=500, message=INTERNAL SERVER ERROR, url=http://192.168.8.103:5000/name} 在 com.mkapps.cvgen.fragments.CreateFragment.fetchGithubInfo(CreateFragment.kt:193) 在 com.mkapps.cvgen.fragments.CreateFragment.access$fetchGithubInfo(CreateFragment.kt:26) 在 com.mkapps.cvgen.fragments.CreateFragment$BackgroundFetcher.run(CreateFragment.kt:217) 在 java.lang.Thread.run(Thread.java:784)

val request = Request.Builder().url(\"http://192.168.8.103:5000/name\").post(formBody).build()
    val response = client.newCall(request).execute()

    if (!response.isSuccessful){
                throw IOException(\"Unexpected code $response\")
    }else if (response.isSuccessful){
        getUrlAsync(NRC)
    }

    return response.body!!.string()
  • 有很多方法可以处理它,例如,您可以捕获异常并向用户显示他们无权访问服务器的警告。
  • @user3738870 示例代码真的很有帮助
  • 当然,你能告诉我你是如何调用返回response.body!!.string()的方法吗?然后我可以告诉你如何在那里处理它
  • square.github.io/okhttp/recipes/… 好的,我正在使用上面文章中的示例代码
  • 好的,但是您的应用程序如何使用该代码?

标签: android kotlin okhttp fatal-error


【解决方案1】:

如果您想通知用户他们无权访问服务器,您可以这样做:

inner class BackgroundFetcher : Runnable {
    override fun run() {  // (3)
        try {
            val github_info = fetchGithubInfo()
            println(github_info)
        } catch (e: IOException) {
            this@CreateFragment.requireActivity().runOnUiThread {
                Toast.makeText(
                    this@CreateFragment.requireActivity(),
                    "Make sure you have access to the server", 
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
    }
}

runOnUiThread 是必需的,因为 BackgroundFetcher 在后台线程上运行,并且只能在 UI 线程上显示 toast。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2015-01-22
    • 2018-06-15
    • 1970-01-01
    • 2017-08-29
    • 2021-04-11
    相关资源
    最近更新 更多