BaseApis
public interface BaseApis {
//被观察者
@GET
Observable<ResponseBody> get(@Url String url);
@POST
Observable<ResponseBody> post(@Url String url, @QueryMap Map<String, String> map);
@Multipart
@POST
Observable<ResponseBody> postFormBody(@Url String url, @PartMap Map<String, RequestBody> requestBodyMap);
}
RetrofitManager
public class RetrofitManager<T> {
//http://172.17.8.100/small/user/v1/register
public static final String REGRITER_URL="http://172.17.8.100/small/";
public static RetrofitManager retrofitManager;
public static synchronized RetrofitManager getInstance(){
if(retrofitManager==null){
retrofitManager=new RetrofitManager();
}
return retrofitManager;
}
private BaseApis mBaseApis;
public RetrofitManager(){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient builder = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.connectTimeout(10,TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
Retrofit builder1 = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(REGRITER_URL)
.client(builder)
.build();
mBaseApis = builder1.create(BaseApis.class);
}
public Map<String, RequestBody> generateRequestBody(Map<String,String> requestDataMap){
HashMap<String, RequestBody> requestBodyHashMap = new HashMap<>();
for (String key:requestDataMap.keySet()){
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),
requestDataMap.get(key) == null ? "" : requestDataMap.get(key));
requestBodyHashMap.put(key,requestBody);
}
return requestBodyHashMap;
}
public RetrofitManager get(String url,HttpListener listener){
mBaseApis.get(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(listener));
return retrofitManager;
}
private Observer getObserver(final HttpListener listener) {
Observer observer=new Observer<ResponseBody>(){
//观察者
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String data = responseBody.string();
if(listener!=null){
listener.onSuccess(data);
}
} catch (IOException e) {
e.printStackTrace();
if(listener!=null){
listener.onFail(e.getMessage());
}
}
}
};
return observer;
}
public RetrofitManager post(String dataUrl,Map<String,String> map,HttpListener listener){
if(map==null){
map=new HashMap<>();
}
mBaseApis.post(dataUrl,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(listener));
return retrofitManager;
}
public RetrofitManager postFormBoby(String dataUrl,Map<String,RequestBody> map,HttpListener listener){
if(map==null){
map=new HashMap<>();
}
mBaseApis.postFormBody(dataUrl,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(listener));
return retrofitManager;
}
public interface HttpListener {
void onSuccess(String data);
void onFail(String error);
}