2

I'm using the OkHttp in my android app to make web requests to a rapidapi API when i click on button . I've already added INTERNET permissions and android:usesCleartextTraffic="true" in my manifest too. But i have error

    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.

My code

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


    }

l am new in kotlin , any idea please

Ali Ghassan
  • 1,280
  • 1
  • 22
  • 59

1 Answers1

4

Code you shared https://play.kotlinlang.org/ via this link, you have used both OkHttp and DownloadManager.

Please use below code,

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

is working after i deleted this line val responses: Response = client.newCall(requests).execute()

Ali Ghassan
  • 1,280
  • 1
  • 22
  • 59
Kishan Maurya
  • 3,356
  • 8
  • 21
  • Thank you for answered . but what about download manger ? i want to him execute when i click on button to getting json object url then pass it to download manger to download file – Ali Ghassan Feb 03 '20 at 12:37