android网络框架Retrofit

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'

相关文章
相关标签/搜索