引入依赖,需要Retrofit的依赖和GsonConverterFactory的依赖找最新版本
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
2.利用PassageResponse.kt文件,封装数据文章数据
data class PassageResponse(val data:Page){
data class Page(val curPage:Int,val datas: List
data class Passage(val link:String,val title:String)
}
3.创建Retrofit接口
interface PassageService {
@GET("article/list/0/json")
fun getPassageData(): Call
}
4.布局就一个按钮,用来发送网络请求 5.网络请求的相关操作,还没有利用kotlin的语法特性来进行化简
class MainActivity : AppCompatActivity() {
val tag = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getPassageDataBtn.setOnClickListener {
val retrofit = Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val passageService = retrofit.create(PassageService::class.java)
passageService.getPassageData().enqueue(object : Callback
override fun onResponse(call: Call
response: Response
{
val passage = response.body()
if(passage != null) Log.d(tag, "onResponse:$passage ")
}
override fun onFailure(call: Call
Log.d(tag, "onFailure: ")
}
})
}
}
}
7.结果展示,返回格式工整的数据
8.对动态代理对象的创建进行优化
创建ServiceCreator.class
//单例类
object ServiceCreator {
//根路径
private const val BASE_URL = "https://www.wanandroid.com/"
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
fun
//可以用 val passageService = ServiceCreator.create(PassageService::class.java) 来创建Service的代理对象
//2 利用泛型实化来进行优化
inline fun
//可以用 val passageService = ServiceCreator.create
}
精彩文章
发表评论