美文网首页
Retrofit入门笔记

Retrofit入门笔记

作者: 027f63d16800 | 来源:发表于2017-11-11 00:18 被阅读113次

Retrofit 是 square 的一个网络请求框架,本文记录Retrofit的学习笔记

Retrofit请求框架将网络请求逻辑和业务逻辑分离,使得我们更关注于服务本身
首先,声明一个接口,接口中的每个函数都可以是一个请求描述

interface GankIOServiceI {
    @GET("data/{type}/{size}/{page}")
    fun getDataByPage(@Path("type") type: String, @Path("size") size: Int, @Path("page") page: Int): Call<ResponseBody>
}
  • @GET注解标识使用get请求,需要传入一个请求路径,最后的服务地址是http://baseUrl\请求路径,请求路径可以使用字符串模板{xxx}
  • @Path注解的参数用于替换请求路径中的字符串模板
  • 更多注解可以参考官方说明文档

接着,使用接口进行网络访问

fun main(vararg args:String) {
  //创建一个Retrofit对象,使用gank.io的api
    var retrofit = Retrofit.Builder().baseUrl("http://gank.io/api/").build()
  // retrofit对象使用动态代理机制生成接口的代理类
    var gankIO = retrofit.create(GankIOServiceI::class.java) as GankIOServiceI
    //直接发起网络请求
    var response = gankIO.getDataByPage("Android", 10, 1).execute()
    println(response.body()?.string())
    //异步发起网络请求,内部维护了一个线程池
    gankIO.getDataByPage("Android", 10, 1).enqueue(object : Callback<ResponseBody> {
        override fun onFailure(p0: Call<ResponseBody>?, p1: Throwable?) {

        }

        override fun onResponse(p0: Call<ResponseBody>?, p1: Response<ResponseBody>?) {
            System.out.println(p1?.body()?.string())
        }
    })
}

加入json转换并和rxjava结合

首先声明entity:

class ResponseMsg<T> {
    var error: Boolean? = null
    var results: List<T>? = null
}

class Msg {
    var _id: String? = null
    var desc: String? = null
    var publishedAt: String? = null
    var source: String? = null
    var type: String? = null
    var url: String? = null
    var used: Boolean? = null
    var who: String? = null
}

修改接口方法:

interface GankIOService {
    @GET("data/{type}/{size}/{page}")
    fun getDataByPage(@Path("type") type: String, @Path("size") size: Int, @Path("page") page: Int): Observable<ResponseMsg<Msg>>
}

发起请求:

fun main(vararg args: String) {
    var retrofit = Retrofit
            .Builder()
            .baseUrl("http://gank.io/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build()
    var gankIO = retrofit.create(GankIOService::class.java) as GankIOService

    gankIO.getDataByPage("Android", 10, 1).flatMap {
        Observable.from(it.results)
    }.map {
        it.desc
    }.subscribe {
        println(it)
    }
    
}

相关文章

网友评论

      本文标题:Retrofit入门笔记

      本文链接:https://www.haomeiwen.com/subject/qjaimxtx.html