美文网首页
2023-05-25 Retrofit 基础使用

2023-05-25 Retrofit 基础使用

作者: 谢勤忠045 | 来源:发表于2023-05-24 10:26 被阅读0次

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 还提供了许多其他注解以及配置选项,结合实际业务灵活运用吧。

相关文章

网友评论

      本文标题:2023-05-25 Retrofit 基础使用

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