BaseApis
package com.zjh.administrat.torchbearer_power.bag.utilsbag;
import java.util.Map;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PartMap;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
public interface BaseApi<T> {
/* @Headers({
"Accept: application/vnd.yourapi.v1.full+json",
"User-Agent: Apps"
})*/
@GET
rx.Observable<ResponseBody> get( @Url String urlStr);
@POST
rx.Observable<ResponseBody> post(@Url String urlStr, @QueryMap Map<String, String> map);
@Multipart
@POST
rx.Observable<ResponseBody> postFormBody(@Url String urlStr, @PartMap Map<String, RequestBody> requestBodyMap);
}
RetrofitManager
package com.zjh.administrat.torchbearer_power.bag.utilsbag;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import static com.zjh.administrat.torchbearer_power.bag.utilsbag.Apis.BASE_UEL;
public class RetrofitManager {
/***
* 使用單例
*/
private static volatile RetrofitManager retrofitManager;
public static RetrofitManager getInstance(){
if (retrofitManager == null){
synchronized (RetrofitManager.class){
retrofitManager = new RetrofitManager();
}
}
return retrofitManager;
}
private BaseApi baseApi;
/***
* 日誌攔截器,超時處理
*/
public RetrofitManager(){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(15, TimeUnit.SECONDS);
builder.readTimeout(15, TimeUnit.SECONDS);
builder.writeTimeout(15, TimeUnit.SECONDS);
builder.addInterceptor(interceptor);
builder.retryOnConnectionFailure(true);
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASE_UEL)
.client(client)
.build();
baseApi = retrofit.create(BaseApi.class);
}
/***
* 處理map集合的類型
*/
public Map<String, RequestBody> generatrRequestBody(Map<String, String> requestDataMap){
Map<String, RequestBody> requestBodyMap = new HashMap<>();
for (String key : requestDataMap.keySet()) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),
requestDataMap.get(key) == null ? "" : requestDataMap.get(key));
requestBodyMap.put(key, requestBody);
}
return requestBodyMap;
}
/**
* get請求
*/
public RetrofitManager get(String url) {
baseApi.get(url)
//後臺執行在哪個線程中
.subscribeOn(Schedulers.io())
//最終完成後執行在哪個線程
.observeOn(AndroidSchedulers.mainThread())
//設置我們的rxJava
.subscribe(observer);
return retrofitManager;
}
/**
* 表單post請求
*/
public RetrofitManager postFormBody(String url, Map<String, RequestBody> map) {
if (map == null) {
map = new HashMap<>();
}
baseApi.postFormBody(url, map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return retrofitManager;
}
/**
* 普通post請求
*/
public RetrofitManager post(String url, Map<String, String> map) {
if (map == null) {
map = new HashMap<>();
}
baseApi.post(url, map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return retrofitManager;
}
private rx.Observer observer = new rx.Observer<ResponseBody>() {
@Override
public void onNext(ResponseBody responseBody) {
try {
String string = responseBody.string();
if (mListener != null){
mListener.onSuccess(string);
}
} catch (IOException e) {
e.printStackTrace();
if (mListener != null){
mListener.onFail(e.getMessage());
}
}
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (mListener != null) {
mListener.onFail(e.getMessage());
}
}
};
/***
* 成員變量
*/
private HttpListener mListener;
/***
* set方法
*/
public void result(HttpListener listener) {
this.mListener = listener;
}
/***
* 定義接口
*/
public interface HttpListener {
void onSuccess(String data);
void onFail(String error);
}
}
IModelImpl
package com.zjh.administrat.torchbearer_power.bag.modelbag;
import com.google.gson.Gson;
import com.zjh.administrat.torchbearer_power.bag.callbackbag.MyCallBack;
import com.zjh.administrat.torchbearer_power.bag.utilsbag.RetrofitManager;
import java.util.Map;
import okhttp3.RequestBody;
public class IModelImpl implements IModel {
/*
* post請求
* */
@Override
public void mrequestData(String url, Map<String, String> params, final Class clazz, final MyCallBack myCallBack) {
//final Map<String, RequestBody> map = RetrofitManager.getInstance().generatrRequestBody(params);
RetrofitManager.getInstance().post(url, params).result(new RetrofitManager.HttpListener() {
@Override
public void onSuccess(String data) {
try{
Object o = new Gson().fromJson(data, clazz);
if(myCallBack != null){
myCallBack.OnSuccess(o);
}
}catch (Exception e){
e.printStackTrace();
if(myCallBack != null){
myCallBack.OnFail(e.getMessage());
}
}
}
@Override
public void onFail(String error) {
if(myCallBack != null){
myCallBack.OnFail(error);
}
}
});
}
/**
* get請求
* */
@Override
public void getRequestData(String url, final Class clazz, final MyCallBack myCallBack) {
RetrofitManager.getInstance().get(url).result(new RetrofitManager.HttpListener() {
@Override
public void onSuccess(String data) {
try{
Object o = new Gson().fromJson(data, clazz);
if(myCallBack != null){
myCallBack.OnSuccess(o);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onFail(String error) {
if(myCallBack != null){
myCallBack.OnFail(error);
}
}
});
}
/**
*
* */
}