Retrofit 入门

作者: 小狮子365 | 来源:发表于2019-10-28 22:40 被阅读0次

    Retrofit 简介

    Retrofit 是 Square 公司基于 Restful 风格推出的网络框架封装。
    Retrofit 与 OKHttp 的关系:Retrofit 是基于 OKHttp 的网络请求框架的二次封装,其本质仍是 OkHttp。

    常见网络库的对比:

    • AndroidAsynHttp:基于 HttpClient,作者已停止维护,Android 5.0 不再使用 HttpClient,因此不推荐使用。
    • Volley:基于 HttpUrlConnection,Google 官方推出,只适合轻量级网络交互,不适合大文件上传下载场景。
    • Retrofit:API 设计简单易用,注解化配置高度解耦,支持多种解析器,支持 RxJava。

    使用步骤

    1. 依赖包导入

    dependencies {
        ...
        implementation 'com.squareup.retrofit2:retrofit:2.6.2'
        implementation 'com.squareup.okhttp3:okhttp:4.2.2'
        implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
    }
    

    2. 网络权限

    网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    3. 创建接口设置请求类型与参数

    public interface UserMgrService {
      @GET("login)
      public Call<UserInfoModel> login(@Query("username") String username, @Query("pwd") String pwd);
    }
    

    常用参数注解:

    • @GET、@POST:确定请求方式
    • @Path:请求 URL 的字符替代
    • @Query:要传递的参数
    • @QueryMap:包含多个 @Query 注解参数
    • @Body:添加实体类对象
    • @FormUrlEncoded:URL 编码

    4. 创建 Retrofit 对象设置数据解析器

    Retrofit retrofit = new Retrofit.Builder().baseUrl(Constants.BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
    

    常用数据解析器:

    • Gson:implementation 'com.squareup.retrofit2:converter-gson:(insert latest version)'
    • Jackson:implementation 'com.squareup.retrofit2:converter-jackson:(insert latest version)'
    • Simple XML:implementation 'com.squareup.retrofit2:converter-simplexml:(insert latest version)'
    • Protobuf:implementation 'com.squareup.retrofit2:converter-protobuf:(insert latest version)'
    • Moshi:implementation 'com.squareup.retrofit2:converter-moshi:(insert latest version)'
    • Wire:implementation 'com.squareup.retrofit2:converter-wire:(insert latest version)'
    • Scalars:implementation 'com.squareup.retrofit2:converter-scalars:(insert latest version)'

    5. 生成接口调用接口方法

    // 生成接口对象
    UserMgrService service = retrofit.create(UserMgrService.class);
    // 调用接口方法返回 Call 对象
    Call<UserInfoModel> call = service.login("zhangsan", "123456");
    

    6. 返送请求处理返回数据

    发送请求(同步/异步):

    • 同步:调用 Call 对象的 execute(),返回结果的响应体。
    • 异步:调用 Call 对象的 enqueue(),参数是一个回调。

    案例

    介绍如何使用Retrofit实现用户登录。

    interface UserMgrService {
        @GET("user")
        fun login(@Query("username") username: String, @Query("pwd") pwd: String): Call<UserInfoModel>
    }
    
    // 1. 创建 Retrofit 对象
    val retrofit = Retrofit.Builder().baseUrl("").addConverterFactory(GsonConverterFactory.create()).build()
    
    // 2. 获取 UserMgrService 对象
    val service = retrofit.create(UserMgrService::class.java)
    
    // 3. 调用登录方法
    val call = service.login("zhangsan", "123456")
    
    // 4. 发送请求
    // 同步方式发送请求
    val response = call.execute() // 注意,不能直接在主线程中执行网络请求,否则会报 NetworkOnMainThreadException 异常(Android 4.0 后强制抛出的异常)。可新建线程去执行网络请求
    
    // 异步方式发送请求
    call.enqueue(object : Callback<UserInfoModel> {
        override fun onFailure(call: Call<UserInfoModel>, t: Throwable) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }
    
        override fun onResponse(call: Call<UserInfoModel>, response: Response<UserInfoModel>) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }
    })
    

    总结

    • Retrofit 是基于 OkHttp 网络库的高级封装
    • 采用注解,网络请求参数配置更灵活,扩展性更好
    • Restful 风格的 API 优先选用 Retrofit

    相关文章

      网友评论

        本文标题:Retrofit 入门

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