OkHTTP запрос в цикле - PullRequest
       11

OkHTTP запрос в цикле

0 голосов
/ 04 октября 2018

Мне нужно сделать HTTP-запрос к серверу в цикле.Я решил использовать okHTTP3, потому что нет необходимости создавать потоки вручную и легко работать с cookie (используя PersistentCookieJar).

Вот мой код:

App.kt

class App : Application() {

    companion object {
        lateinit var cookieJar: ClearableCookieJar
        lateinit var okHttpClient: OkHttpClient 
    }

    override fun onCreate() {
        super.onCreate()
        cookieJar = PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(applicationContext))

        okHttpClient = OkHttpClient.Builder()
            .cookieJar(cookieJar) // for session cookies
            .build()
    }
}

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    getQuery("https://example.com/path")

}

fun getQuery(url: String) {
    Log.e("log", "getQuery start") 
    val request = Request.Builder()
            .url(url)
            .build()

    App.okHttpClient.newCall(request)?.enqueue(object : okhttp3.Callback { 
        override fun onFailure(call: okhttp3.Call?, e: IOException?) {                
            Log.e("log", "onFailure " + e?.message)
        }

        override fun onResponse(call: okhttp3.Call?, response: okhttp3.Response?) { 
            val resp = response?.body()?.string()
            val code = response?.code()
            Log.e("log", "onResponse " + code.toString() + " " + resp ) 

            try {
                // here getting info from resp 
            } catch (e: Exception) {
                    Log.e("log", "catch " + e?.message)
            } finally {
                    getQuery("https://example.com/path") // call in cycle
            }
        }
    })
}

Когда я вызываю getQuery из себя, okHttpClient ничего не делает, logcat не показывает onResponse, не onFailure.Я думаю, это из-за вызова из другого потока, созданного okHttpClient.

Что я делаю не так?

...