昨天將 OKHTTP3 的準備動作完成,今天繼續來做後續的動作。
首先,要先宣告一個 receive 。
private val httpReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
intent?.extras?.let {
val album = Gson().fromJson(it.getString("json"), Album::class.java)
}
}
}
假設現在已經收到資料,但因為通常回的格式會是 JSON
但我們要把它轉成物件對我們後續分析、拿取資料會比較方便,所以昨天有 implementation GSON 這一個套件,便是用來將 JSON
轉成我們看得懂的物件。
val album = Gson().fromJson(it.getString("json"), Album::class.java)
這行便是將 response 的 json 轉成自建的 data class。
轉成 data class 之後,就把它當成一個物件來使用、取值!
而這是已經取到值的情形,那要如何對網路請求呢?
上面我們宣告了一個接收器,接下來要寫一個發送請求的。
val req = Request.Builder()
.url("https://jsonplaceholder.typicode.com/albums/1")
.build()
OkHttpClient().newCall(req).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
sendBroadcast(Intent("HttpGet").putExtra("json", response.body()?.string()))
}
override fun onFailure(call: Call, e: IOException) {
Toast.makeText(this@HttpGetActivity, "Http Get Fail", Toast.LENGTH_SHORT).show()
}
}
這樣就可以發送請求了!
但記得要註冊接收器registerReceiver(httpReceiver, IntentFilter("HttpGet"))
與在不用時銷毀它unregisterReceiver(httpReceiver)