一、需求
访问网络接口获取星座数据
二、网络框架
一个基于 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")
}
}
}