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

问题描述 投票:0回答:5

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

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

如何使用kotlin从Url读取JSON?

android kotlin rx-kotlin
5个回答
5
投票

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

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

来自docs

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

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

请注意,如果您在Android活动中使用此功能,应用程序会崩溃,因为您使用异步调用阻止了主线程。为避免应用程序崩溃,我建议您使用Anko。更准确地说,你只需要add the commons dependency - 不是整个图书馆 - 。

你可以找到更多信息in this blog post


4
投票

试试这个

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

1
投票

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

Volley更容易,但是比Volley更快地改装。你的选择。

Volley Link

Retrofit Link


1
投票

最后我从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>;
}

1
投票

readText()是Antonio Leiva在他的书籍Kotlin for Android Developers(以及根据dgrcodeanswer的博客文章中)介绍网络时使用的方法。但是我不确定readText()是否是一般的请求方法来自URL的JSON响应作为响应可能非常大(甚至Antonio提到肯定了Kotlin文档说readText有大小限制的事实)。根据this discussion,你应该使用流而不是readText。我希望看到使用该方法或Kotlin中最简洁和最优的方法对此答案的响应,而不添加库依赖项。

另见this thread

另请注意,在readText()不适合的情况下,安东尼奥确实在该博客文章中提供了替代方案。我很乐意看到有人在适当或不合适的时候提供一些明确的信息。

© www.soinside.com 2019 - 2024. All rights reserved.