package com.sxjs.common.model.http; import android.content.Context; import com.sxjs.common.CommonConfig; import java.util.HashMap; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.inject.Singleton; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * http helper负责创建ApiService实例 */ @Singleton public class HttpHelper { private Context context; private Retrofit mRetrofitClient; private HashMap<String, Object> mServiceMap; @Inject public HttpHelper(Context context) { this.context = context; mServiceMap = new HashMap<>(); initRetrofitClient(); } @SuppressWarnings("unchecked") public <S> S getService(Class<S> serviceClass) { if (mServiceMap.containsKey(serviceClass.getName())) { return (S) mServiceMap.get(serviceClass.getName()); } else { Object obj = createService(serviceClass, null); mServiceMap.put(serviceClass.getName(), obj); return (S) obj; } } @SuppressWarnings("unchecked") public <S> S getService(Class<S> serviceClass, OkHttpClient client) { if (mServiceMap.containsKey(serviceClass.getName())) { return (S) mServiceMap.get(serviceClass.getName()); } else { Object obj = createService(serviceClass, client); mServiceMap.put(serviceClass.getName(), obj); return (S) obj; } } private void initRetrofitClient() { OkHttpClient httpClient = new OkHttpClient.Builder() .readTimeout(CommonConfig.HTTP_READ_TIME_OUT, TimeUnit.SECONDS) .connectTimeout(CommonConfig.HTTP_CONNECT_TIME_OUT, TimeUnit.SECONDS) .addInterceptor(new BaseInterceptor<>(null,context)) .build(); mRetrofitClient = createRetrofitClient(httpClient); } private Retrofit createRetrofitClient(OkHttpClient httpClient) { return new Retrofit.Builder() .client(httpClient) .baseUrl(CommonConfig.BASE_URL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()).build(); } private <S> S createService(Class<S> serviceClass, OkHttpClient client){ if(client == null){ return mRetrofitClient.create(serviceClass); }else{ return createRetrofitClient(client).create(serviceClass); } } }