1、简介java
Retrofit在OkHttp之上对网络请求、数据结果作了封装,是一款为简化网络操做推出的框架。react
2、gradle依赖android
compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'json
3、实现步骤缓存
1.建立REST API网络
public interface HttpService {
@GET("/")
Call<TestEntity> getData();
}
2.配置Retrofit框架
private HttpService createHttpApi(){ Retrofit retrofit = new Retrofit .Builder() .baseUrl(base_url) .client(OkHttpSetting.mOkHttpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//设置RxJavaCallAdapter .addConverterFactory(GsonConverterFactory.create())//Gson数据转换格式 .build(); return retrofit.create(HttpService.class); }
3.配置OkHttp异步
public class OkHttpSetting { private static final String TAG = OkHttpSetting.class.getSimpleName(); public static OkHttpClient mOkHttpClient = new OkHttpClient(); private static HttpLoggingInterceptor loggingBody; private static Interceptor interceptor;//拦截器,能够拦截发出的请求和返回的信息日志 public OkHttpSetting(){ Log.i(TAG, "OkHttpSetting"); if(mOkHttpClient == null){ interceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Log.i(TAG, "intercept"); Request request = chain.request(); Response response = chain.proceed(request); return response; } }; mOkHttpClient.interceptors().add(interceptor);//设置拦截器 mOkHttpClient.setConnectTimeout(60, TimeUnit.SECONDS); mOkHttpClient.setReadTimeout(60, TimeUnit.SECONDS); } } static { //设置http日志缓存 if(loggingBody == null){ loggingBody = new HttpLoggingInterceptor(); loggingBody.setLevel(HttpLoggingInterceptor.Level.BODY); mOkHttpClient.networkInterceptors().add(loggingBody); } Interceptor trace = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); Log.i(TAG, "http日志"); return response; } }; mOkHttpClient.interceptors().add(trace); Log.i(TAG, "setting"); } }
4.执行请求(同步:execute 异步:enqueue)ide
Call<TestEntity> call = createHttpApi().getData(); call.enqueue(new Callback<TestEntity>() {//异步执行 @Override public void onResponse(Response<TestEntity> response, Retrofit retrofit) { TestEntity entity = response.body(); int code = response.code(); Log.i(TAG, "onResponse"); } @Override public void onFailure(Throwable t) { Log.i(TAG, t.getMessage()); } });
4、版本对比(1.x和2.x)gradle
1.版本1.x没有直接取消正在进行中任务的方法,而2.x能够用cancle()方法取消。
2.版本1.x中包含GsonConverter而且在RestAdapter建立的时候被初始化,这样会自动解析json数据。但在版本2.x中,须要本身插入一个Converter,不然只能接受字符串结果。依赖的包:
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1'
3.若是想接受json数据并解析,须要导入retrofit:converter-gson包,而后addConverterFactory(GsonConverterFactory.create())。
4.版本1.x中okhttp是可选的,在2.x中,okhttp是必须的,而且自动设置了依赖。
5.版本1.x中包含了RequestInterceptor,而在版本2.x中将这一部分移除,改成使用Okhttp中的Interceptor。
6.除了使用Call定义接口返回数据,版本2.x还提供了CallAdapter机制,其中最著名的是为RxJava提供的CallAdapter,它可将接口返回数据做为Observable。依赖的包以下:
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
compile 'io.reactivex:rxandroid:1.0.1'