Retrofit2+RXjava复习笔记

方便后期使用,仅仅记录使用逻辑

一、初步使用。不做任何添加

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://xxxx") //访问地址公共部分
       .addConverterFactory(GsonConverterFactory.create()) //我这里不设置,解析response就会报错(其他人好像不会)
        .build();

//这个是接口对象,相当于配置文件,用于生成request的参数、完整地址等信息。
ApiService apiService = retrofit.create(ApiService.class);

Call<ApiResponse<Object>> info = apiService.getInfo("0025e10849cc");
info.enqueue(new Callback<ApiResponse<Object>>() {
    @Override
    public void onResponse(Call<ApiResponse<Object>> call, Response<ApiResponse<Object>> response) {
        Log.e(TAG, "onResponse: " + response.body().toString());
    }

    @Override
    public void onFailure(Call<ApiResponse<Object>> call, Throwable t) {

    }
});
ApiService.class 文件主要内容 

public interface ApiService {
   //可以有多个内容,自己设置,post等(这里是拼接地址)
    @GET("v1/sideWalkMachine/findCommunityInfo/{serialNumber}")
//ApiResponse<Object> 是解析response的body得到的解析对象。path是指路径。还可以是其他参数
    Call<ApiResponse<Object>> getInfo(@Path("serialNumber") String deviceId);
}

这里是ApiResponse.class

public class ApiResponse<T> {

        private String timestemp;
        private T data;
        private String responseCode;
        private String errorMsg;

//get set 等

}

二、需要设置访问超时等设置。

实现:主要是堆内部实现的okhttp进行设置

 OkHttpClient.Builder builder = new OkHttpClient.Builder();
   // set timeout
   builder.connectTimeout(15, TimeUnit.SECONDS);
   builder.readTimeout(60, TimeUnit.SECONDS);
   builder.writeTimeout(60, TimeUnit.SECONDS);

//下面的是拦截器内容,可以不知道,只是自己分析

// builder.addInterceptor(new HostMoreInterceptor());//添加拦截器,可以添加公共头等,这个是最先拦截,最后放行的拦截器。
  // builder.addNetworkInterceptor(getLoggingInterceptor());//添加网络拦截器。比如:HttpLoggingInterceptor。查看日志。
//addInterceptor和addNetworkInterceptor都是添加拦截器,主要是为了区分拦截顺序,addInterceptor是访问网络前//addNetworkInterceptor是访问网络过程中。其中还有其他内置的拦截器
/**所有拦截器顺序和内置拦截器
Response getResponseWithInterceptorChain() throws IOException {
  // Build a full stack of interceptors.
  List<Interceptor> interceptors = new ArrayList<>();
  interceptors.addAll(client.interceptors());
  interceptors.add(retryAndFollowUpInterceptor);
  interceptors.add(new BridgeInterceptor(client.cookieJar()));
  interceptors.add(new CacheInterceptor(client.internalCache()));
  interceptors.add(new ConnectInterceptor(client));
  if (!forWebSocket) {
    interceptors.addAll(client.networkInterceptors());
  }
  interceptors.add(new CallServerInterceptor(forWebSocket));**/

   // retry 连接失败时 是否重试
   builder.retryOnConnectionFailure(true);
   // client
   OkHttpClient  mOkHttpClient = builder.build();
   Retrofit retrofit = new Retrofit.Builder().baseUrl("http:XX")
           .client(mOkHttpClient)//主要是堆内部实现的okhttp进行设置
          .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器,可以自己实现
           .build();

三、结合添加使用RXjava

Retrofit retrofit = new Retrofit.Builder().baseUrl("XX")
.client(mOkHttpClient)
.addConverterFactory(GsonConverterFactory.create()) //设置数据解析器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//设置后,在Apiservice.clss中Observable替代call
.build();

修改Apiservice.class 

public interface ApiService {

Observable<ApiResponse<Object>> getInfo(@Path("serialNumber") String deviceId);

}

进入RXjava使用流程

Observable<ApiResponse<Object>> info = apiService.getInfo("0025e10849cc");
            info.subscribeOn(Schedulers.io())
              .subscribe(new Observer<ApiResponse<Object>>(){

                  @Override
                  public void onSubscribe(Disposable d) {

                  }

                  @Override
                  public void onNext(ApiResponse<Object> value) {
                      Log.e(TAG, "onResponse: " + value.toString());
                  }

                  @Override
                  public void onError(Throwable e) {

                  }

                  @Override
                  public void onComplete() {

                  }
              });

四、最终实现,进类进行封装,方便后期使用

上传git

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值