我正在使用kotlin开发应用程序。现在我想从服务器获取JSON数据。
在java中我实现了Asyntask以及Rxjava,用于从Url读取JSON。我也在谷歌搜索,但我无法得到我的要求的正确细节。
如何使用kotlin从Url读取JSON?
我想你正在尝试从服务器API读取响应,你希望它是一个带有JSON的字符串。为此,您可以使用:
val apiResponse = URL("yourUrl").readText()
来自docs:
使用UTF-8或指定的字符集将此URL的全部内容读取为String。
不建议在大文件上使用此方法。
请注意,如果您在Android活动中使用此功能,应用程序会崩溃,因为您使用异步调用阻止了主线程。为避免应用程序崩溃,我建议您使用Anko。更准确地说,你只需要add the commons dependency - 不是整个图书馆 - 。
你可以找到更多信息in this blog post
试试这个
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更容易,但是比Volley更快地改装。你的选择。
最后我从Here得到答案
使用Retrofit 2.0 RxJava,RxAndroid,Kotlin Android Extensions读取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<NewsResponse>;
}
readText()是Antonio Leiva在他的书籍Kotlin for Android Developers(以及根据dgrcode的answer的博客文章中)介绍网络时使用的方法。但是我不确定readText()是否是一般的请求方法来自URL的JSON响应作为响应可能非常大(甚至Antonio提到肯定了Kotlin文档说readText有大小限制的事实)。根据this discussion,你应该使用流而不是readText。我希望看到使用该方法或Kotlin中最简洁和最优的方法对此答案的响应,而不添加库依赖项。
另请注意,在readText()不适合的情况下,安东尼奥确实在该博客文章中提供了替代方案。我很乐意看到有人在适当或不合适的时候提供一些明确的信息。