【问题标题】:FATAL EXCEPTION: main : okhttp3.RealCall.execute致命异常:主要:okhttp3.RealCall.execute
【发布时间】:2020-02-04 17:37:00
【问题描述】:

当我单击按钮时,我在我的 android 应用程序中使用 OkHttp 向 rapidapi API 发出网络请求。我已经在我的清单中添加了 INTERNET 权限和android:usesCleartextTraffic="true"。但我有错误

    AndroidRuntime: FATAL EXCEPTION: main
        Process: com.ex.fbinstadownloader, PID: 27537
        android.os.NetworkOnMainThreadException
            at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
            at okhttp3.RealCall.execute(RealCall.java:77)
            at com.ex.fbinstadownloader.MainActivity.StartDwonload(MainActivity.kt:62)
            at com.ex.fbinstadownloader.MainActivity.access$StartDwonload(MainActivity.kt:19)
            at com.ex.fbinstadownloader.MainActivity$onCreate$1.onClick(MainActivity.kt:33)
            at android.view.View.performClick(View.java:6261)
            at android.widget.TextView.performClick(TextView.java:11163)
            at android.view.View$PerformClick.run(View.java:23748)
            at android.os.Handler.handleCallback(Handler.java:751)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6776)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
    Application terminated.

我的代码

 private fun StartDwonload() {
    val url = editText.text.toString()


        val client = OkHttpClient()

        val requests = Request.Builder()
            .url("xxxxxxxxxxigurl="+url)
            .get()
            .addHeader("x-rapidapi-host", "xxxxxx")
            .addHeader("x-rapidapi-key", "xxxxxxx")
            .build()

        val responses: Response = client.newCall(requests).execute()

        print(responses.body()?.string())


    }

我是 kotlin 的新手,请有什么想法

【问题讨论】:

  • android.os.NetworkOnMainThreadException.... 不允许在主线程上进行网络调用。请使用协程进行网络调用 else rxjava
  • 我是 kotlin 新手,怎么做
  • 但我只通过按钮单击运行我的代码
  • 是的,单击按钮后,如果没有错误,它正在调用 StartDwonload()。而在这里面,有网络调用操作

标签: kotlin okhttp


【解决方案1】:

您通过此链接分享的代码https://play.kotlinlang.org/, 你已经使用过 OkHttp 和 DownloadManager。

请使用以下代码,

private fun StartDwonload() {
    val url = editText.text.toString()

        val client = OkHttpClient()

        val requests = Request.Builder()
            .url("https://instagram-facebook-media-downloader.p.rapidapi.com/api?igurl="+url)
            .get()
            .addHeader("x-rapidapi-host", "xxxxxx")
            .addHeader("x-rapidapi-key", "xxxxxxx")
            .build()

       // val responses: Response = client.newCall(requests).execute()

        client.newCall(requests).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {}
            override fun onResponse(call: Call, response: Response) = println(response.body?.string())
        })
    }

在我删除此行val responses: Response = client.newCall(requests).execute()后工作正常@

【讨论】:

  • 感谢您的回答。但是下载管理器呢?当我单击按钮以获取 json 对象 url 然后将其传递给下载管理器以下载文件时,我希望他执行
猜你喜欢
  • 2020-09-23
  • 2012-03-04
  • 2018-04-30
  • 2012-06-02
  • 2012-09-08
  • 2014-02-07
  • 2012-10-12
  • 2014-04-15
相关资源
最近更新 更多