Я использую 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 () не является подходящим выбором. Я бы хотел, чтобы кто-то дал некоторую ясность, когда это уместно или нет, хотя.