2017-07-03 136 views
0

正在使用kotlin開發應用程序。現在我想從服務器獲取JSON數據。如何使用kotlin Android從Url讀取JSON?

在java中,我實現了Asyntask以及Rxjava從Url讀取JSON。我也在谷歌搜索,但我不能得到我的要求適當的細節。

如何使用kotlin從Url讀取JSON?

回答

2

試試這個

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

我需要從服務器url讀取json數據。 – sasikumar

+0

現有的Android庫與Kotlin兼容,您可以改造或選擇獲取數據。 –

1

您可以使用排或改造庫Kotlin.Actually你可以使用所有的Java庫在科特林。

排氣更容易,但改造速度比排氣更快。您的選擇。

Volley Link

Retrofit Link

1

最後是利用改造2.0 RxJava, RxAndroid, 科特林的Android擴展Here

讀取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

我想你想讀取服務器API,您希望與JSON字符串的響應。要做到這一點,你可以使用:

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

docs

使用UTF-8或指定字符集讀取該URL的全部內容爲一個字符串。

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

請注意,如果您在Android活動中使用此應用程序,則應用程序崩潰是因爲您使用異步調用阻止了主線程。爲避免應用程序崩潰,我建議您使用Anko。更確切地說,你只需要add the commons dependency-不是整個圖書館。

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

+0

誤導人。也不回答問題。 –

+1

@ Paul-Sebastian不僅它回答了這個問題,而且它是唯一一個能夠解答如何在不使用Java庫的情況下做到的問題。它如何誤導? –

+0

對不起,我想上次我試過你的答案,但沒有奏效,但我不記得爲什麼。只是不理我。抱歉。 –

0

READTEXT()是方法,當他(在博客文章,也爲每dgrcodeanswer)引入了網絡在他的著作科特林Android開發但是安東尼萊瓦使用I 'm不確定readText()是一種正確的方法,通常可以從URL中請求JSON響應,因爲響應可能非常大(即使安東尼奧提到確認Kotlin文檔聲明對readText有大小限制的事實)。根據this discussion,您應該使用流而不是readText。我希望在不添加庫依賴關係的情況下,使用該方法或Kotlin中最簡潔和最優化的任何方法來查看對此答案的回覆。

又見this thread

還要注意,安東尼確實在博客帖子的情況下提供替代品時READTEXT()不是合適的選擇。我很樂意看到有人在何時適當或不適合時提供了一些清晰的內容。