1.DataCall
public interface DataCall<T> {
void success(T data);
void fail(Result result);
}
- Iport
public interface Iport {
@FormUrlEncoded
@POST("product/getProducts")
Observable<Result<List<Goods>>> goods(@Field("pscid") int pscid);
}
3.NetWorkManager
public class NetWorkManager {
String baseurl="https://www.zhaoapi.cn/";
private static NetWorkManager instance;
private Retrofit retrofit;
private NetWorkManager(){
init();
}
public static NetWorkManager instance(){
if (instance==null){
instance=new NetWorkManager();
}
return instance;
}
private void init() {
HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient=new OkHttpClient.Builder()
.addInterceptor(interceptor)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.connectTimeout(60,TimeUnit.SECONDS)
.build();
retrofit=new Retrofit.Builder()
.baseUrl(baseurl)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public <T> T create(final Class<T> service){
return retrofit.create(service);
}
}
4.BasePresenter
public abstract class BasePresenter {
DataCall dataCall;
public BasePresenter(DataCall dataCall) {
this.dataCall = dataCall;
}
protected abstract Observable observable(Object... args);
public void request(Object... args) {
observable(args)
.compose(new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return upstream.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Result>() {
@Override
public void accept(Result result) throws Exception {
dataCall.success(result);
}
}, new Consumer<Result>() {
@Override
public void accept(Result result) throws Exception {
dataCall.fail(result);
}
});
}
public void unBind() {
dataCall = null;
}
}
5.GoodsPresenter P层
public class GoodsPresenter extends BasePresenter {
public GoodsPresenter(DataCall dataCall) {
super(dataCall);
}
@Override
protected Observable observable(Object... args) {
Iport iport = NetWorkManager.instance().create(Iport.class);
return iport.goods(1);
}
}