Android Retrofit 是一个基于 OkHttp 的 HTTP/REST API 客户端,我们可以通过retrofit将我们的相关接口api更容易的封装成便于我们控制的结构,而且结合Rxjava也可以更好的控制我们的相关线程.
基础步骤
1 增加依赖
2 创建api接口
3 初始化retrofit
4 创建API实例
5 发起请求......
1 添加相关依赖
// retrofit基础依赖
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//数据解析
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
//rxjava
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2创建api接口(基础实例)
public interface DownloadApi {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);//get请求
@POST("/ota/v1/req")
Observable<ResponseBean> checkApp(@Header("sign") String sign, @Body RequestBean requestBean);//基础post请求
@POST
Observable<ResponseBody> downloadApp(@Url String url, @Header("sign") String sign, @Header("Range") String range, @Body DownLoadRequestBean downLoadRequestBean);//动态设置url 并且添加多个header
}
3 初始化Retrofit实例并且创建API实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("平台接口地址url")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
DownloadApi downloadApi = retrofit.create(DownloadApi.class);
4 发起网络请求实例
//用于处理post请求的单线程,请求发起和接受都在当前线程中处理
public static ExecutorService upgradeService = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setName("upgradeService" + thread.getId());
return thread;
}
});
Call<ResponseBean> call = downloadApi.listRepos("test");
call.enqueue(new Callback<ResponseBean>() {
@Override
public void onResponse(Call<ResponseBean> call, Response<ResponseBean> response) {
}
@Override
public void onFailure(Call<ResponseBean> call, Throwable t) {
}
});
//构建自己的请求bean
RequestBean requestBean = new RequestBean();
String sing = "添加你得http请求的head头内容";
downloadApi.checkApp(sign,requestBean)
.subscribeOn(Schedulers.from(upgradeService))//接口请求发起的线程
.observeOn(Schedulers.from(upgradeService))//收到结果处理的线程
.onErrorResumeNext(new Function<Throwable, ObservableSource<? extends ResponseBean>>() {
@Override
public ObservableSource<? extends ResponseBean> apply(Throwable throwable) throws Exception {
//接口异常处理
return Observable.empty();
}
}).concatMap(new Function<ResponseBean, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(ResponseBean responseBean) throws Exception {
//正常业务逻辑处理
return Observable.empty();
}
}).subscribe();
downloadApi.downloadApp("动态url",sign,range,downLoadRequestBean)
.subscribeOn(Schedulers.from(UpgradeConstant.upgradeService))
.observeOn(Schedulers.from(UpgradeConstant.upgradeService))
.onErrorResumeNext(new Function<Throwable, ObservableSource<? extends ResponseBody>>() {
@Override
public ObservableSource<? extends ResponseBody> apply(Throwable throwable) throws Exception {
Log.e(TAG,"throwable:"+throwable.toString());
callMessage(11,throwable.toString());
return Observable.empty();
}
}).concatMap(new Function<ResponseBody, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(ResponseBody response) throws Exception {
return Observable.empty();
}
}).subscribe();
以上是一个简单的retrofit的基础使用,结合Rxjava使用的话效果更佳,需要对Rxjava有点儿基础,后续我会把我对rxjava的基础使用做个简单总结,关于retrofit的一些注解如下所示:
@GET - 用于定义一个 GET 请求
@GET("users/{user}")
Call<User> getUser(@Path("user") String user);
@POST - 用于定义一个 POST 请求。
@POST("users")
Call<User> createUser(@Body User user);
@PUT - 用于定义一个 PUT 请求。
@PUT("users/{id}")
Call<User> updateUser(@Path("id") int id, @Body User user);
@DELETE - 用于定义一个 DELETE 请求。
@DELETE("users/{id}")
Call<Void> deleteUser(@Path("id") int id);
@Query - 用于在请求 URL 中添加查询参数。
@GET("search")
Call<List<Movie>> searchMovies(@Query("q") String query);
@Path - 用于替换 URL 中的占位符。
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
@Body - 用于传递请求体数据。
@POST("users")
Call<User> createUser(@Body User user);
@Header - 用于添加请求头部信息。
@GET("users/{user}")
Call<User> getUser(@Path("user") String user, @Header("Authorization") String token);
以上是 Retrofit 常用的注解介绍,你可以根据具体需求进行使用。其实,Retrofit 还提供了许多其他注解以及配置选项,结合实际业务灵活运用吧。