package ren.solid.library.http;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Field;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by _SOLID
* Date:2016/7/27
* Time:15:23
*/
public class ServiceFactory {
private final Gson mGson;
private OkHttpClient mOkHttpClient;
private ServiceFactory() {
mGson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss")
.create();
mOkHttpClient = OkHttpProvider.getDefaultOkHttpClient();
}
private static class SingletonHolder {
private static final ServiceFactory INSTANCE = new ServiceFactory();
}
public static ServiceFactory getInstance() {
return SingletonHolder.INSTANCE;
}
public static ServiceFactory getNoCacheInstance() {
ServiceFactory factory = SingletonHolder.INSTANCE;
factory.mOkHttpClient = OkHttpProvider.getOkHttpClient();
return factory;
}
public <S> S createService(Class<S> serviceClass) {
String baseUrl = "";
try {
Field field1 = serviceClass.getField("BASE_URL");
baseUrl = (String) field1.get(serviceClass);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.getMessage();
e.printStackTrace();
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(mOkHttpClient)
.addConverterFactory(GsonConverterFactory.create(mGson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return retrofit.create(serviceClass);
}
}