1. 引入依赖,需要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<Passage>)

    data class Passage(val link:String,val title:String)

}

3.创建Retrofit接口

interface PassageService {

    @GET("article/list/0/json")
    fun getPassageData(): Call<PassageResponse>

}

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<PassageResponse>{
                override fun onResponse(call: Call<PassageResponse>,
                                        response: Response<PassageResponse>)
                {
                    val passage = response.body()
                    if(passage != null) Log.d(tag, "onResponse:$passage ")
                }

                override fun onFailure(call: Call<PassageResponse>, 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 <T> create(serviceClass:Class<T>):T = retrofit.create(serviceClass)
    //可以用 val passageService = ServiceCreator.create(PassageService::class.java) 来创建Service的代理对象

    //2 利用泛型实化来进行优化
    inline fun <reified T> create():T = create(T::class.java)
    //可以用 val passageService = ServiceCreator.create<NewService>() 来创建Service的代理对象

}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐