iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
Mobile Development

Android Architecture Components 學習心得筆記系列 第 2

Day 2 Retrofit (一) 介紹與基本使用

  • 分享至 

  • xImage
  •  

在 Android 開發中,網絡請求十分常用
網路上也找得到很多知名的套件 Ex: Volley, okhttp 等等...
以及這次的主角 Retrofit

簡介

Retrofit 是一套由 Square 所開發維護,基於 okhttp 並遵循 Restful 風格的一個網路請求函式庫。
為什麼說他是基於 okhttp 呢,因為 Retrofit 只是把 okhttp 的一些語法簡化、封裝起來,實際上在對網路做請求時還是透過 okhttp 在操作,所以只要把 Retrofit 想像成是 okhttp 2.0 就可以了。

先決知識

限制

Java 6(含) 和 Android 2.3(含) 以上

優點

  • 支持同步、異步網路請求
  • 提供多種數據的解析( JSON, GSON....)
  • 代碼簡潔
  • 支持 RxJava

使用

build.gradle 添加依賴

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.6.1'
    ...
}

AndroidManifest 添加網路權限

<uses-permission android:name="android.permission.INTERNET"/>

建立 data class

用 Postman 測試的 response 長這樣
https://ithelp.ithome.com.tw/upload/images/20190805/20119398b6cTTcUSbT.png

建好後的 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 命名)

建立 API 介面

interface TeamApi {

    @GET("teams/16")
    fun getTeam(): Call<Teams>
    
}

最後一步

使用 Retrofit

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
https://ithelp.ithome.com.tw/upload/images/20190805/20119398SyFOnI4hug.png

94這麼簡單

有任何問題或講得不清楚的地方歡迎留言和我討論。

更歡迎留言糾正我任何說錯的地方!

下一篇:Retrofit (二) 了解每個步驟


上一篇
Day 1 前言與介紹
下一篇
Day 3 Retrofit (二) 了解每個步驟
系列文
Android Architecture Components 學習心得筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言