retrofit2兼容rxjava的配置和demo



废话不多说,直接贴上代码,代码中完全的注释,完整的demo在最下面
package com.example.administrator.myapplication000.http;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.concurrent.TimeUnit;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by l on 2016-10-15.
 */
public class Retrofit2Manger {
    static Retrofit2Manger retrofit2Manger;

    private Retrofit2Manger() {

    }

    public static synchronized Retrofit2Manger getInstance() {
        if (retrofit2Manger == null) {
            retrofit2Manger = new Retrofit2Manger();
        }
        return retrofit2Manger;
    }

//将retrofit的配置好,并且反射出对象以便实用
    public <T> T create(Class<T> service) {
        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//兼容rxjava,网络请求可以直接返回一个Obervable或者call
                .addConverterFactory(GsonConverterFactory.create())//兼容gson,网络请求成功,直接返回一个转换好的对象出来
                .client(getOkHttpClient())//配置ohhttp
                .baseUrl(getBaseUrl(service))//获取url
                .build();
        return retrofit.create(service);
    }

    private final int Time_Out = 10;

    private OkHttpClient getOkHttpClient() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(Time_Out, TimeUnit.SECONDS);
        builder.readTimeout(Time_Out, TimeUnit.SECONDS);
        builder.writeTimeout(Time_Out, TimeUnit.SECONDS);
        //配置打印信息,网络响应体中的数据都会打印出来
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        builder.addInterceptor(loggingInterceptor);
        builder.addInterceptor(new HttpInterceptor());
        return builder.build();
    }

    //所有的头部信息都可以在这里添加到头部中去
    public class HttpInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request.Builder builder = chain.request().newBuilder();
            Request requst = builder.addHeader("Content-type", "application/json").build();
//所有公用头部信息,都要从这里add进去
            return chain.proceed(requst);
        }
    }


    //简单的反射,将url反射出来
    private <T> String getBaseUrl(Class<T> service) {
        try {
            Field base_url = service.getField("Base_Url");
            return (String) base_url.get(service);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章