引入依赖,需要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, t: Throwable) {

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 create(serviceClass:Class):T = retrofit.create(serviceClass)

//可以用 val passageService = ServiceCreator.create(PassageService::class.java) 来创建Service的代理对象

//2 利用泛型实化来进行优化

inline fun create():T = create(T::class.java)

//可以用 val passageService = ServiceCreator.create() 来创建Service的代理对象

}

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。