Kotlin: обработать тайм-аут соединения, охттп - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок в Kotlin. я пытаюсь создать приложение, используя OkHttp для отправки веб-запросов на API-интерфейс quickapi, загружая файлы, когда нажимаю кнопку Я уже добавил настройки Connect Timeout, но я хочу обработать соединение Timeout, когда Connect Timeout я хочу показать пользователю диалог, чтобы повторить попытку или отменить.

   private fun StartDwonload() {


    val url = editText.text.toString()


        val client = OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build()

        val requests = Request.Builder()
            .url("xxxxxxx?igurl="+url)
            .get()
            .addHeader("x-rapidapi-host", "xxxxx")
            .addHeader("x-rapidapi-key", "xxxx")
            .build()
        client.newCall(requests).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {}

            override fun onResponse(call: Call, response: Response){

                val responseData = response.body()?.string()
                runOnUiThread{
                    try {
                        var json = JSONObject(responseData)
                        println("Request Successful!!")
                        println(json)
                        val responseObject = json.get("downloadurl").toString()

                        val request = DownloadManager.Request(Uri.parse((responseObject)))
                        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
                        request.setTitle("Download")
                        request.setDescription("Dwonloading ...")
                        request.allowScanningByMediaScanner()
                        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"${System.currentTimeMillis()}.mp4")
                        print(DownloadManager.ACTION_DOWNLOAD_COMPLETE)
                        val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
                        manager.enqueue((request))

                        progressDialog.dismiss()

                    } catch (e: JSONException) {
                        e.printStackTrace()
                    }
                }

            }
        })



    }

Любая идея, пожалуйста?

1 Ответ

0 голосов
/ 04 февраля 2020

В вашем методе OnFailure () вы можете проверить, является ли ваша ошибка SocketTimeoutException , как это

override fun onFailure(call: Call, e: IOException) {
if(e is SocketTimeoutException){
//do your work
}
}
...