Как читать JSON из Url с помощью kotlin Android?

Я использую kotlin для разработки приложения. Теперь я хочу получать данные JSON с сервера.

В java am реализована Asyntask, а также Rxjava для чтения JSON с Url. Я также ищу в google, но я не могу получить надлежащие данные для моего требования.

Как я могу читать JSON из Url с помощью kotlin?

Попробуй это

fun parse(json: String): JSONObject? { var jsonObject: JSONObject? = null try { jsonObject = JSONObject(json) } catch (e: JSONException) { e.printStackTrace() } return jsonObject } 

Вы можете использовать библиотеку Volley или Retrofit в Kotlin. Обычно вы можете использовать все библиотеки Java в Kotlin.

Волейбол легче, но переделать быстрее, чем волейбол. Ваш выбор.

Волейбол

Дооснащение

Наконец, я получаю ответ отсюда

Читайте данные Json с помощью Retrofit 2.0 RxJava, RxAndroid, Kotlin Android Extensions.

  fun provideRetrofit(): Retrofit { return Retrofit.Builder() .baseUrl("https://www.example.com") .addConverterFactory(MoshiConverterFactory.create()) .build() } 

модуль

 interface Api { @GET("/top.json") fun getTop(@Query("after") after: String, @Query("limit") limit: String): Call<NewsResponse>; } 

Думаю, вы пытаетесь прочитать ответ API-интерфейса сервера, который, как вы ожидаете, является строкой с JSON. Для этого вы можете использовать:

 val apiResponse = URL("yourUrl").readText() 

Из документов :

Читает весь контент этого URL как строку, используя UTF-8 или указанную кодировку.

Этот метод не рекомендуется использовать для огромных файлов.

Обратите внимание, что если вы используете это в действии Android, приложение падает, потому что вы блокируете основной поток с помощью асинхронного вызова. Чтобы избежать сбоя приложения, я рекомендую использовать Anko . Точнее, вам просто нужно добавить зависимость от сообщества, а не всю библиотеку.

Вы можете найти больше информации в этом блоге

readText () – это подход, который использует Антонио Лейва, когда он вводит Networking в свою книгу Kotlin для разработчиков Android (а также в сообщение в блоге в ответ на dgrcode ). Однако я не уверен, что readText () – это правильный подход в целом для запроса ответов JSON от URL-адреса, поскольку ответ может быть очень большим (даже Антонио упоминает, что тот факт, что Kotlin сообщает, что существует ограничение на размер readText). В соответствии с этим обсуждением вы должны использовать потоки вместо readText. Я хотел бы увидеть ответ на этот ответ, используя этот подход или что-то более краткое и оптимальное в Котлине, не добавляя зависимости библиотек.

См. Также эту тему

Обратите также внимание на то, что Антонио предлагает альтернативы в этом блоге для ситуаций, когда readText () не является подходящим выбором. Я бы хотел, чтобы кто-то дал некоторую ясность, когда это уместно или нет, хотя.