Retrofit2+RXjava复习笔记

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

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

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

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

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

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

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

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

这里是ApiResponse.class

public class ApiResponse {

        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 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> getInfo(@Path("serialNumber") String deviceId);

}

进入RXjava使用流程

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

                  @Override
                  public void onSubscribe(Disposable d) {

                  }

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

                  @Override
                  public void onError(Throwable e) {

                  }

                  @Override
                  public void onComplete() {

                  }
              }); 
  

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

上传git

 

你可能感兴趣的:(Retrofit2+RXjava复习笔记)