1蚣常、創(chuàng)建ApiServer
public interface ApiServer {
//須自己實(shí)現(xiàn)getInstance()方法
static ApiServer getInstance(){
return HttpCreator.getServer(ApiServer.class);
}
@POST("common/encrypt")
Observable<User> requestEncrptTest(@Body Map request);
@POST("common/unencrypt")
Observable<String> requestUnencrptTest(@Body Map request);
}
注:每一個(gè)Server接口都需要寫一個(gè)靜態(tài)方法getInstance()谤民,返回的是對(duì)應(yīng)接口的一個(gè)Retrofit封裝的實(shí)例值依,方便調(diào)用苦丁。接口內(nèi)部方法的返回值必須是Observable<T>。請(qǐng)求參數(shù)如果是寫在請(qǐng)求體內(nèi)的镊逝,則以map封裝萄喳。
2、在Presnenter里調(diào)用
public class DemoPresenter extends BasePresenter implements DemoContract.IDemoPresenter {
@Override
public void doDemo(String param) {
Map<String,String> request = new HashMap<>();
request.put("password","123456");
request.put("nickname","chenpeng");
ApiServer.getInstance()
.requestEncrptTest(request)
.compose(RxJavaUtils.compose(getLifecycleTransformer()))
.subscribe(new ApiCallBack<User>() {
@Override
public void onSuccess(User user) {
}
@Override
public void onApiFail(ApiException exception) {
}
@Override
public void onFail(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
注:
注意在ApiServer請(qǐng)求的時(shí)候中間調(diào)用了方法compose(RxJavaUtils.compose(getLifecycleTransformer()))蹋半,其在內(nèi)部處理了線程的切換和生命周期(在Activity或Fragment銷毀時(shí)會(huì)自動(dòng)取消本次請(qǐng)求),
getLifecycleTransformer()是BasePresenter里的方法充坑。
ApiCallBack是項(xiàng)目封裝的一個(gè)網(wǎng)絡(luò)回調(diào)接口,代碼如下
public abstract class ApiCallBack<T> extends ResourceObserver<T> {
@Override
public void onNext(T t) {
onSuccess(t);
}
@Override
public void onError(Throwable e) {
if(e instanceof ApiException){
onApiFail((ApiException)e);
}else {
e.printStackTrace();
onFail(e);
}
}
abstract public void onSuccess(T t);
abstract public void onApiFail(ApiException exception);
abstract public void onFail(Throwable e);
}
ApiException是對(duì)服務(wù)器的響應(yīng)封裝的一個(gè)異常,代碼如下
public class ApiException extends RuntimeException {
private String code;
private String message;
public static ApiException build(String code,String message){
ApiException exception = new ApiException();
exception.code = code;
exception.message = message;
return exception;
}
public String getCode() {
return code;
}
@Nullable
@Override
public String getMessage() {
return message;
}
}
RxJavaUtils代碼如下
public class RxJavaUtils {
public static <T> ObservableTransformer<T, T> compose(final LifecycleTransformer<T> lifecycleTransformer) {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(lifecycleTransformer);
}
};
}
}