废话不多说,直接贴上代码,代码中完全的注释,完整的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;
}
}