在 Android 開發中,網絡請求十分常用
網路上也找得到很多知名的套件 Ex: Volley, okhttp 等等...
以及這次的主角 Retrofit
Retrofit 是一套由 Square 所開發維護,基於 okhttp 並遵循 Restful 風格的一個網路請求函式庫。
為什麼說他是基於 okhttp 呢,因為 Retrofit 只是把 okhttp 的一些語法簡化、封裝起來,實際上在對網路做請求時還是透過 okhttp 在操作,所以只要把 Retrofit 想像成是 okhttp 2.0 就可以了。
Java 6(含) 和 Android 2.3(含) 以上
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
...
}
<uses-permission android:name="android.permission.INTERNET"/>
用 Postman 測試的 response 長這樣
建好後的 data class
data class Teams(
@SerializedName("id")
val id: Int = 0,
@SerializedName("abbreviation")
val abbreviation: String = "",
@SerializedName("city")
val city: String = "",
@SerializedName("conference")
val conference: String = "",
@SerializedName("division")
val division: String = "",
@SerializedName("full_name")
val fullName: String = "",
@SerializedName("name")
val name: String = ""
)
SerializedName
對應的是 api 的 key,接回來後的變數名稱可以自行修改
(例如 full_name 接回來的變數用 fullName 命名)
interface TeamApi {
@GET("teams/16")
fun getTeam(): Call<Teams>
}
最後一步
private fun getTeam() {
val retrofit = Retrofit
.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://free-nba.p.rapidapi.com/")
.build()
val teamApi = retrofit.create(TeamApi::class.java)
val call = teamApi.getTeam()
call.enqueue(object : Callback<Teams> {
override fun onFailure(call: Call<Teams>?, t: Throwable?) {
Log.d("Huang", " get teams fail ")
}
override fun onResponse(call: Call<Teams>?, response: Response<Teams>) {
Log.d("Huang", " get teams success " + response.body())
}
})
}
呼叫 getTeam
後在 Logcat 就可以看到回傳的 body
94這麼簡單
有任何問題或講得不清楚的地方歡迎留言和我討論。
更歡迎留言糾正我任何說錯的地方!