使用retrofit進行網路請求

weixin_41650019發表於2020-09-29

一、需求
訪問網路介面獲取星座資料
二、網路框架

一個基於 OkHttp 的 RESTful API 請求工具
Retrofit 在使用時其實就充當了一個介面卡(Adapter)的角色,主要是將一個 Java 介面翻譯成一個 HTTP 請求物件,然後用 OkHttp 去傳送這個請求
核心思想:動態代理—通俗來講,就是你要執行某個操作的前後需要增加一些操作,比如檢視使用者個人資訊前需要判斷使用者是否登入,使用者訪問資料庫後想清除使用者的訪問記錄等操作

三、實現步驟
1.確定網路的url介面

const val LAUNCH_URL = "http://域名:埠號/"

2.訪問介面將訪問得到的資料複製下來,按快捷鍵Alt+K
將複製的內容轉化成ConstellationLuck
這是用了JsonToKotlinClass外掛,將Json生對應的Bean

data class ConstellationLuck(
    var astrology: String = " ",
    var color: String = " ",
    var day: String = " ",
    var desc: String = " ",
    var health: Double = 0.0,
    var love: Double = 0.0,
    var match: String = " ",
    var money: Double = 0.0,
    var number: Int = 0,
    var synthetical: Double = 0.0,
    var work: Double = 0.0
)

3.寫這個類的介面

interface LaunchService {
      @GET("v1/xxx/detail")
    suspend fun getTodayDetail(
        @Query("consName") consName:String,
        @Query("type") type:String
    ): ApiResult<ConstellationLuck>

    @GET("v1/xxx/detail")
    suspend fun getWeekDetail(
        @Query("consName") consName: String,
        @Query("type") type:String
 ):ApiResult<MutableList<ConstellationWeekLuck>>
}

4.通過Retrofit來請求介面
這是在繼承Application類中的onCreate方法中寫的

ScaffoldConfig.getInstance(this)
    .setBaseUrl(LAUNCH_URL)
    .debug(BuildConfig.DEBUG)

接下來就是在需要的活動中請求

private val service by lazy {
ScaffoldConfig.getRepositoryManager().obtainRetrofitService(LaunchService::class.java)
}

launch {
    if (data != null) {
        val todayConstellation = service.getTodayDetail(data as String, "today")
        if (todayConstellation.status == STATUS_OK) {
            constellationLuck = todayConstellation.data!!
            Timber.d("99999-=====$constellationLuck")
            //將拿到的資料constellation傳給陣列
            setTodayValue(constellationLuck)
            if (dayLuckList.size != 0) {
                dayLuckList.clear()
            }
            initDayLuck()
            initLuckRecyclerViewAdapter()
            setOtherContext()
        }else{
            Timber.d("today網路出錯了2,55555")
        }
    }
}

相關文章