gaoshijie365.tech

Retrofit 入门

2019-10-28  本文已影响0人  小狮子365

Retrofit 简介

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

常见网络库的对比:

使用步骤

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);
}

常用参数注解:

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

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

常用数据解析器:

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

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

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

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

案例

介绍如何使用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.
    }
})

总结

上一篇下一篇

猜你喜欢

热点阅读