RetrofitUtils
package com.example.activity.myapplication.utils;
import java.io.IOException;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class RetrofitUtils {
private final MyApiService myApiService;
private RetrofitUtils() {
HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient=new OkHttpClient.Builder()
.readTimeout(20,TimeUnit.SECONDS)
.connectTimeout(20,TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.retryOnConnectionFailure(true)
.build();
Retrofit retrofit=new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Contacts.BASE_URL)
.client(okHttpClient)
.build();
//通過Retrofit創建完 這個ApiService 就可以調用方法了
myApiService = retrofit.create(MyApiService.class);
}
private static class RetroHolder{
private static final RetrofitUtils retrofitUtils=new RetrofitUtils();
}
public static RetrofitUtils getInstence(){
return RetroHolder.retrofitUtils;
}
public RetrofitUtils get(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, final HttpListener httpListener){
Observer<ResponseBody> observer=new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ResponseBody responseBody) {
if(httpListener!=null){
try {
httpListener.onSuccess(responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
myApiService.get(url,map,hashMap)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return RetrofitUtils.getInstence();
}
public RetrofitUtils post(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, final HttpListener httpListener){
Observer<ResponseBody> observer=new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ResponseBody responseBody) {
if(httpListener!=null){
try {
httpListener.onSuccess(responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
myApiService.post(url,map,hashMap)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return RetrofitUtils.getInstence();
}
//HttpListener httpListener;
public interface HttpListener{
void onSuccess(String jsonStr);
void onError(String error);
}
/* public void setHttpListene( HttpListener httpListener){
this.httpListener=httpListener;
}*/
}
MyApiService
package com.example.activity.myapplication.utils;
import java.util.HashMap;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
import rx.Observable;
public interface MyApiService {
@GET
Observable<ResponseBody> get(@Url String url, @QueryMap HashMap<String,String> map,@HeaderMap HashMap<String,Object> hashMap);
@POST
Observable<ResponseBody> post(@Url String url,@QueryMap HashMap<String,String> map,@HeaderMap HashMap<String,Object>hashMap);
}
contacts
package com.example.activity.myapplication.utils;
public class Contacts {
public static final String BASE_URL="http://172.17.8.100/";
public static final String LOGIN_URL="small/user/v1/login";
public static final String REGIST_URL="small/user/v1/register";
//輪播
public static final String USER_LUNBO = "small/commodity/v1/bannerShow";
public static final String HOME_GOODSURL="small/commodity/v1/commodityList";
public static final String CIRCLE_URL="small/circle/v1/findCircleList";
}
Persenter
package com.example.activity.myapplication.presenter;
import java.util.HashMap;
public interface Persenter {
void requestPost(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, Class clazz);
void requestGEt(String url, HashMap<String,String> map,HashMap<String,Object>hashMap,Class clazz);
}
PersenterImpl
package com.example.activity.myapplication.presenter;
import com.example.activity.myapplication.callback.MyCallBack;
import com.example.activity.myapplication.model.ModelImpl;
import com.example.activity.myapplication.view.IView;
import java.util.HashMap;
public class PersenterIpml implements Persenter {
private ModelImpl model;
private IView iView;
public PersenterIpml(IView iView) {
this.iView = iView;
model=new ModelImpl();
}
@Override
public void requestPost(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, Class clazz) {
model.getPostData(url, map,hashMap, clazz, new MyCallBack() {
@Override
public void setData(Object data) {
iView.success(data);
}
@Override
public void setError(Object error) {
iView.error(error);
}
});
}
@Override
public void requestGEt(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, Class clazz) {
model.getData(url, map,hashMap, clazz, new MyCallBack() {
@Override
public void setData(Object data) {
iView.success(data);
}
@Override
public void setError(Object error) {
iView.error(error);
}
});
}
}
Model
package com.example.activity.myapplication.model;
import com.example.activity.myapplication.callback.MyCallBack;
import java.util.HashMap;
public interface Model {
void getPostData(String url,HashMap<String,String>map,HashMap<String,Object>hashMap,Class clazz,MyCallBack callBack);
void getData(String url, HashMap<String,String>map,HashMap<String,Object>hashMap,Class clazz ,MyCallBack callBack);
}
ModelImpl
package com.example.activity.myapplication.model;
import com.example.activity.myapplication.callback.MyCallBack;
import com.example.activity.myapplication.utils.RetrofitUtils;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.HashMap;
public class ModelImpl implements Model {
// private MyCallBack callBack;
@Override
public void getPostData(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, final Class clazz, final MyCallBack callBack) {
RetrofitUtils.getInstence().post(url,map,hashMap,new RetrofitUtils.HttpListener() {
@Override
public void onSuccess(String jsonStr) {
Gson gson=new Gson();
Object o = gson.fromJson(jsonStr, clazz);
callBack.setData(o);
}
@Override
public void onError(String error) {
callBack.setError(error);
}
});
}
@Override
public void getData(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, final Class clazz, final MyCallBack callBack) {
RetrofitUtils.getInstence().get(url,map,hashMap,new RetrofitUtils.HttpListener() {
@Override
public void onSuccess(String jsonStr) {
Gson gson=new Gson();
Object o = gson.fromJson(jsonStr, clazz);
callBack.setData(o);
}
@Override
public void onError(String error) {
callBack.setData(error);
}
});
}
}