方便后期使用,仅仅记录使用逻辑
一、初步使用。不做任何添加
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