package com.qh.xuezhimin.wynshop.http;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class NetWorkManager {
private static NetWorkManager mInstance;
private Retrofit retrofit;
// private static final String BASE_URL = "http://mobile.bwstudent.com/small/";
private static final String BASE_URL = "http://172.17.8.100/small/";
private NetWorkManager() {
init();
}
public static NetWorkManager getInstance() {
if (mInstance == null) {
mInstance = new NetWorkManager();
}
return mInstance;
}
/**
* 初始化必要对象和参数
*/
private void init() {
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC))
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
// 初始化Retrofit
retrofit = new Retrofit.Builder()
.client(client)//添加自定义的OKHhttp
.baseUrl(BASE_URL)//设置base_url
//rxjava处理回调的数据
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
//gson数据转换器
.addConverterFactory(GsonConverterFactory.create())
.build();
}
//把接口的注解翻译为OKhttp请求
public <T> T create(final Class<T> service) {
return retrofit.create(service);
}
}
package com.qh.xuezhimin.wynshop.mvp.presenter;
import com.qh.xuezhimin.wynshop.bean.QueryCartBean;
import com.qh.xuezhimin.wynshop.bean.Result;
import com.qh.xuezhimin.wynshop.core.exception.CustomException;
import com.qh.xuezhimin.wynshop.core.exception.ResponseTransformer;
import com.qh.xuezhimin.wynshop.http.DataCall;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public abstract class BasePresenter {
private DataCall dataCall;
private boolean running;
public BasePresenter(DataCall dataCall) {
this.dataCall = dataCall;
}
protected abstract Observable<Result<List<QueryCartBean>>> observable(Object... args);
public void request(Object... args) {
if (running) {
return;
}
running = true;
observable(args)
.compose(ResponseTransformer.handleResult())
.compose(new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
})
.subscribe(new Consumer<Result>() {
@Override
public void accept(Result result) throws Exception {
running = false;
dataCall.success(result);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
running = false;
//处理异常
dataCall.fail(CustomException.handleException(throwable));
}
});
// observable(args).subscribeOn(Schedulers.newThread())//将请求调度到子线
// .observeOn(AndroidSchedulers.mainThread())//观察响应结果,把响应结果调度到主线程中处理程上
// .subscribe(consumer, new Consumer<Throwable>() {
// @Override
// public void accept(Throwable throwable) throws Exception {
// throwable.printStackTrace();
// }
// });
}
//暴露一个运行的方法
public boolean isRunning() {
return running;
}
public void unBind() {
dataCall = null;
}
}
package com.qh.xuezhimin.wynshop.http;
import com.qh.xuezhimin.wynshop.bean.BannerBean;
import com.qh.xuezhimin.wynshop.bean.GoodsDetailsBean;
import com.qh.xuezhimin.wynshop.bean.KeyWordBean;
import com.qh.xuezhimin.wynshop.bean.QueryCartBean;
import com.qh.xuezhimin.wynshop.bean.Result;
import com.qh.xuezhimin.wynshop.bean.CircleBean;
import com.qh.xuezhimin.wynshop.bean.UserInfo;
import com.qh.xuezhimin.wynshop.bean.homegoods.ResultBean;
import com.qh.xuezhimin.wynshop.bean.my.AddressBean;
import com.qh.xuezhimin.wynshop.bean.order.OutAllList;
import java.util.List;
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface RequestInterFace {
//登录
@POST("user/v1/login")
@FormUrlEncoded
Observable<Result<UserInfo>> login(@Field("phone") String phone,
@Field("pwd") String pwd);
//注册
@FormUrlEncoded
@POST("user/v1/register")
Observable<Result> register(@Field("phone") String phone,
@Field("pwd") String pwd);
//banner
@GET("commodity/v1/bannerShow")
Observable<Result<List<BannerBean>>> homeBanner();
//首页三种类型数据
@GET("commodity/v1/commodityList")
Observable<Result<ResultBean>> homeList();
//关键字搜索
@GET("commodity/v1/findCommodityByKeyword")
Observable<Result<List<KeyWordBean>>> searchKeyWord(
@Query("keyword") String keyword,
@Query("page") int page,
@Query("count") int count);
//圈子
@GET("circle/v1/findCircleList")
Observable<Result<List<CircleBean>>> findCircleList(
@Header("userId") long userId,
@Header("sessionId") String sessionId,
@Query("page") int page,
@Query("count") int count);
//详情页面展示
@GET("commodity/v1/findCommodityDetailsById")
Observable<Result<GoodsDetailsBean>> detailsByIdGetData(
@Header("userId") long userId,
@Header("sessionId") String sessionId,
@Query("commodityId") int commodityId);
//购物车查询
@GET("order/verify/v1/findShoppingCart")
Observable<Result<List<QueryCartBean>>> queryCart(
@Header("userId") long userId,
@Header("sessionId") String sessionId);
//查看全部订单
@GET("order/verify/v1/findOrderListByStatus")
Observable<Result<List<OutAllList>>> queryAllOrder(
@Header("userId") long userId,
@Header("sessionId") String sessionId,
@Query("status") int status,
@Query("page") int page,
@Query("count") int count);
//查看我的地址
@GET("user/verify/v1/receiveAddressList")
Observable<Result<AddressBean>> queryAddress(
@Header("userId") long userId,
@Header("sessionId") String sessionId);
}