如何使用kotlin Android从Url读取JSON?

我正在使用kotlin开发应用程序。现在我想从服务器获取JSON数据。

在Java中实现了Asyntask以及Rxjava从Url读取JSON。 我也搜索谷歌,但我无法得到我的要求适当的细节。

如何使用kotlin从Url读取JSON?

尝试这个

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

您可以在Kotlin中使用Volley或Retrofit库。实际上,您可以使用Kotlin中的所有Java库。

排气更容易,但比Volley.Your的选择更快。

齐射链接

改造链接

最后从这里得到答案

使用Retrofit 2.0 RxJava,RxAndroid,Kotlin Android扩展阅读Json数据。

  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; } 

我想你正试图读取服务器API的响应,你希望这是一个JSON字符串。 为此,您可以使用:

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

从文档 :

使用UTF-8或指定的字符集将该URL的全部内容作为字符串读取。

这个方法不建议在大文件上使用。

请注意,如果您在Android活动中使用此应用程序,则应用程序崩溃是因为您使用异步调用阻止了主线程。 为了避免应用程序崩溃,我建议您使用Anko 。 更确切地说,你只需要添加commons依赖项,而不是整个库。

您可以在此博客文章中find更多信息

readText()是Antonio Leiva在他的Android开发人员Kotlin(以及dgrcode的答案中的博客文章)中介绍了Networking的方法。但是我不确定readText()是否是正确的方法用于请求来自URL的JSON响应,因为响应可能非常大(即使安东尼奥提到确认Kotlin文档说readText有大小限制的事实)。 根据这个讨论 ,你应该使用流而不是readText。 我希望在不添加库依赖的情况下,使用该方法或Kotlin中最简洁和最佳的方法来查看对此答案的回复。

另见这个线程

还要注意,当readText()不是合适的选择时,Antonio确实在该博客文章中提供了替代方案。 我很乐意看到有人提供了一些清楚什么时候适合或不适合。