如何使用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确实在该博客文章中提供了替代方案。 我很乐意看到有人提供了一些清楚什么时候适合或不适合。