как правильно получить XML с сервера в Kotlin - PullRequest
0 голосов
/ 02 марта 2020

В iOS разработке, когда я получаю URL, который отображает XML, я могу проанализировать весь файл XML и использовать его данные в своем коде, но в Kotlin я попытался извлечь тот же URL, и он возвращает только первый тег XML, как если бы остальные были скрыты в основном теге.

    val urlString = URL_TO_FETCH_IN_HTTPS (String)
    val client = OkHttpClient()
    val request = Request.Builder().url(urlString).build()

    client.newCall(request).enqueue(object: Callback {
        override fun onResponse(call: Call, response: Response) {
            if (response.isSuccessful) {
                val body = response.body?.string()

                println("RESPONSE " + body)
            }
        }

        override fun onFailure(call: Call, e: IOException) {
            println("Failure")
        }
    })

Ответ на этот вызов просто

RESPONSE < ?xml version="1.0" encoding="UTF-8"?>< rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

Хотя URL-адрес хороший и возвращаемое XML в браузере тоже хорошо.

Так что же я делаю не так в коде? Как я могу получить целые XML по этому URL?

Я использовал библиотеку OkHttp для извлечения данных из URL

1 Ответ

0 голосов
/ 02 марта 2020

Прежде всего для отладки Okhttp, я бы предложил добавить перехватчик:

val logging = HttpLoggingInterceptor()
            logging.level = HttpLoggingInterceptor.Level.HEADERS
            logging.level = HttpLoggingInterceptor.Level.BODY

Затем создайте свой клиент таким образом, чтобы сначала добавить перехватчик и иметь время ожидания дескриптора:

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

Затем вы можете: client.newCall(request).enqueue(object : Callback { ...

Таким образом, вы можете легко отладить Okhttp, и вы получите в журнале запрос, который вы сделали с параметром send +, затем ответ сервера с кодом и тело. Все звонки написаны синим цветом для лучшей видимости ie.

, если у вас все еще есть проблема, не стесняйтесь спрашивать.

Более того, вы должны взглянуть на дооснащение2, это простая задача для обработки все апикаль.

...