手を伸ばす党福祉:Rxjava Subscriberネットワークアクセスコールバックパッケージ

4857 ワード

あなたはまだこのようにネットの要求を書いていますか(それではあなたは遠くに行きます):
        view.showProgress();
        subscription = Order().search(new ParamsBuilder().put("xxxxx","xxxxx").build())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1() {
                    @Override
                    public void call(Response response) {
                        view.hideProgress();
                        if (response.isSuccess())
                            view.xxxxxxxxxx(response.getList());
                        else view.showError(response.getMsg());
                    }
                }, new Action1() {
                    @Override
                    public void call(Throwable e) {
                        e.printStackTrace();
                        view.hideProgress();
                        view.showErrorMessage(e.getMessage());
                    }
                });
xxxxx.addSubscription(subscription);

ここでviewはMVPモードにおけるactivity/fragmentのインタフェースである

私がカプセル化したコード:

/**
 * the base response callback entity
 * Created by deadline on 16/8/8.
 *
 * onFinish() 
 */
 public abstract class OnRequestCallback extends Subscriber {

    public abstract void onFailed(int code, String message);

    public abstract void onException(String message);

    public abstract void onResponse(T response);

    public abstract void onFinish();

    @Override
    public void onStart() {
        if (!NetUtil.isConnected()){
                onFailed( -1, App.getContext().getString(R.string.network_unavailable));
                onFinish();
                unsubscribe();
                return;
        }
    }

    @Override
    public final void onCompleted() {
        onFinish();
    }

    @Override
    public final void onError(Throwable e)
    {
        onException(e.getMessage());
        onFinish();
    }

    @Override
    public final void onNext(T response)
    {
        if(response.isSuccess())
        {
            onResponse(response);
        }else {
            onFailed(response.getCode(), response.getMessage());
        }
    }
}

/**
 *  ,  
 *  ,  
 *  abstract .
 * T.showLong();  toast 
 * Created by deadline on 16/8/8.
 */

public abstract class OnSimpleRequestCallback extends OnRequestCallback {
    @Override
    public void onStart() {
        super.onStart();
    }


    @Override
    public void onFinish() {

    };

    @Override
    public void onFailed(int code, String message){
        T.showLong(message);
    };

    @Override
    public void onException(String message){
        T.showLong(message);
    };
}

/**
 *  
 *
 *  onResponse/onFailed/onException  BaseView.finish
 *  activity , OnProgressRequestCallback view,
 *  , , finish activty
 *    OnProgressRequestCallback.onFinish ,
 *  , WeakReference.
 *
 * Created by deadline on 16/8/8.
 */
public abstract class OnProgressRequestCallback
                                        extends OnSimpleRequestCallback{

    private WeakReference reference;

    public OnProgressRequestCallback(BaseView baseView){
        reference = new WeakReference(baseView);
    }

    /**
     *  
     */
    @Override
    public void onStart() {
        reference.get().showProgress();
        super.onStart();
    }

    /**
     * onFinish() 
     */
    @Override
    public void onFinish() {
        reference.get().hideProgress();
    }
}

使用方法:


そうです.このように使います.

エラー/異常注意に関心を持つ必要はありません。


ネットワークが接続されていないことに関心を持つ必要はありません。


progressDialog表示の非表示に関心を持つ必要はありません。


どういたしまして、使えますから、持って行ってください.いいねをつけるのを忘れないで!
            xxxxx
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new OnProgressRequestCallback(mView) {
                    @Override
                    public void onResponse(Response response) {
                        
                    }
                });

Responseクラス:

public class Response {

    private String message;

    private int code;

    public boolean isSuccess(){
        return code == 0;
    }


    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}