首先 请求方式需要 写 get post
@GET
Observable get(@Url String url);
@POST
Observable post(@Url String url, @QueryMap Map<String,String> map);
接下来的是固定的拦截器 和Retrofit的
private final MyApiService myApiService;
private RetrofitUtils(){
HttpLoggingInterceptor loggingInterceptor=new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient=new OkHttpClient.Builder()
.readTimeout(20, TimeUnit.SECONDS)
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.retryOnConnectionFailure(true)
.build();
Retrofit retrofit=new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Contacts.BASE_URL)
.client(okHttpClient)
.build();
myApiService = retrofit.create(MyApiService.class);
}
public static RetrofitUtils getInstance(){
return OKholder.retro;
}
private static class OKholder{
static RetrofitUtils retro=new RetrofitUtils();
}
}
get和 post请求
public void get(String url,HttpListener listener){
base.get(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(listener));
}
public void post(String url, Map<String,String> map,HttpListener listener){
if(map==null){
map=new HashMap<>();
}
base.post(url,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(listener));
}
private Observer getObserver(final HttpListener listener){
Observer <ResponseBody> observer=new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if(listener!=null){
listener.onError(e.getMessage());
}
}
@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.onError(e.getMessage());
}
}
}
};
return observer;
}
public interface HttpListener{
void onSuccess(String data);
void onError(String error);
}
void onPostRequestStart(String s, Map<String, String> map, Class clas, MyCallBack myCallBack);
void onGetRequestStart(String s, Class clas, MyCallBack myCallBack);
@Override
public void onPostRequestStart(String s, Map<String, String> map, final Class clas, final MyCallBack myCallBack) {
RetrofitManager.getInstnce().post(s, map, new RetrofitManager.HttpListener() {
@Override
public void onSuccess(String data) {
Object o = new Gson().fromJson(data, clas);
myCallBack.onSuccess(o);
}
void onPostStartRequest(String s, Map<String, String> map, Class clas);
void onGetStartRequest(String s, Class clas);