android网络框架Retrofit

一、简介

Retrofit在OkHttp之上对网络请求、数据结果做了封装,是一款为简化网络操作推出的框架。

二、gradle依赖

compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'

三、实现步骤

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)

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());
    }
});

四、版本对比(1.x和2.x)

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'

 

 

 

 

转载于:https://my.oschina.net/kun123/blog/794993

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值