詹子聪 hace 5 años
padre
commit
ee52cb658a

+ 1 - 1
app/src/main/java/com/miekir/newmvp/ui/home/HomeActivity.java

@@ -34,7 +34,7 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
                 break;
             case R.id.btn_task:
                 // 点击之后,后台执行耗时操作
-                mArticlePresenter.doStickyWork();
+                mArticlePresenter.doProgressWork();
                 break;
             default:
                 break;

+ 5 - 5
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/SimpleArticlePresenter.java

@@ -2,14 +2,14 @@ package com.miekir.newmvp.ui.home.article.presenter;
 
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.presenter.BasePresenter;
-import com.miekir.network.widget.observe.cancelable.CancelableObserver;
+import com.miekir.network.widget.observe.MvpObserver;
 import com.miekir.newmvp.ui.home.IArticleView;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.disposables.Disposable;
-import io.reactivex.internal.observers.LambdaObserver;
+import io.reactivex.observers.DisposableObserver;
 import io.reactivex.schedulers.Schedulers;
 
 /**
@@ -57,17 +57,17 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
      * 有进度,可以手动取消的任务
      */
     public void doProgressWork() {
-        LambdaObserver<String> disposable = new CancelableObserver<String>(this) {
+        DisposableObserver<String> disposable = new MvpObserver<String>(this, true) {
             @Override
             public void onSuccess(int code, String s) {
-
+                post(view -> view.onArticleResult("result"));
             }
 
             @Override
             public void onFailure(int code, Throwable e, String errMsg) {
 
             }
-        }.getDisposal();
+        };
 
         Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {

+ 66 - 0
network/src/main/java/com/miekir/network/widget/observe/MvpObserver.java

@@ -0,0 +1,66 @@
+package com.miekir.network.widget.observe;
+
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.constant.Code;
+import com.miekir.network.utils.ExceptionUtil;
+
+import io.reactivex.observers.DisposableObserver;
+
+/**
+ * 进度条观察者
+ * 需要进度条时,调用onSubscribe同时显示进度条,
+ * 流程走到onComplete/onError时隐藏进度条。
+ * @author Miekir
+ * 用于可见,可手动取消的网络任务
+ */
+public abstract class MvpObserver<T> extends DisposableObserver<T> {
+    private boolean mWithLoading;
+    private BasePresenter<?> mPresenter;
+
+    public MvpObserver(final BasePresenter<?> presenter) {
+        this(presenter, false);
+    }
+
+    public MvpObserver(final BasePresenter<?> presenter, final boolean withLoading) {
+        mWithLoading = withLoading;
+        mPresenter = presenter;
+        if (withLoading) {
+            presenter.showProgress();
+        }
+    }
+
+    @Override
+    public void onNext(T t) {
+        if (mWithLoading) {
+            mPresenter.hideProgress();
+        }
+        onSuccess(Code.SUCCESS, t);
+    }
+
+    @Override
+    public void onComplete() {}
+
+    @Override
+    public void onError(Throwable e) {
+        if (mWithLoading) {
+            mPresenter.hideProgress();
+        }
+        e.printStackTrace();
+        onFailure(Code.FAILURE, e, ExceptionUtil.exceptionHandler(e));
+    }
+
+    /**
+     * 成功回调
+     * @param code 返回码
+     * @param t 返回的实体
+     */
+    public abstract void onSuccess(int code, T t);
+
+    /**
+     * 失败回调
+     * @param code 返回码
+     * @param e 异常
+     * @param errMsg 异常信息
+     */
+    public abstract void onFailure(int code, Throwable e, String errMsg);
+}

+ 78 - 0
network/src/main/java/com/miekir/network/widget/observe/NetMvpObserver.java

@@ -0,0 +1,78 @@
+package com.miekir.network.widget.observe;
+
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.base.BaseResponse;
+import com.miekir.network.constant.Code;
+import com.miekir.network.utils.ExceptionUtil;
+
+import io.reactivex.annotations.NonNull;
+import io.reactivex.observers.DisposableObserver;
+
+/**
+ * 返回结果处理
+ * @author Miekir
+ * 没加载框,可手动取消的网络任务
+ */
+public abstract class NetMvpObserver<T> extends DisposableObserver<BaseResponse<T>> {
+
+    private boolean mWithLoading;
+    private BasePresenter<?> mPresenter;
+
+    public NetMvpObserver(final BasePresenter<?> presenter) {
+        this(presenter, false);
+    }
+
+    public NetMvpObserver(final BasePresenter<?> presenter, final boolean withLoading) {
+        mWithLoading = withLoading;
+        mPresenter = presenter;
+        if (withLoading) {
+            presenter.showProgress();
+        }
+    }
+
+    @Override
+    public void onNext(@NonNull BaseResponse<T> response) {
+        if (mWithLoading) {
+            mPresenter.hideProgress();
+        }
+        try {
+            if (response.getCode() == Code.SUCCESS) {
+                onSuccess(response.getCode(), response.getContent());
+            } else if (response.getCode() == Code.TOKEN_TIMEOUT) {
+                // 重新登录
+            } else {
+                onFailure(response.getCode(), new Exception(response.getMessage()), response.getMessage());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            onFailure(Code.FAILURE, new Exception("null"), null);
+        }
+    }
+
+    @Override
+    public void onComplete() {}
+
+    @Override
+    public void onError(@NonNull Throwable e) {
+        if (mWithLoading) {
+            mPresenter.hideProgress();
+        }
+        e.printStackTrace();
+        onFailure(Code.FAILURE, e, ExceptionUtil.exceptionHandler(e));
+    }
+
+    /**
+     * 成功
+     * @param code
+     * @param result
+     */
+    public abstract void onSuccess(int code, T result);
+
+    /**
+     * 失败
+     * @param code
+     * @param e
+     * @param errMsg
+     */
+    public abstract void onFailure(int code, Throwable e, String errMsg);
+}

+ 1 - 2
network/src/main/java/com/miekir/network/widget/observe/sticky/NetStickyObserver.java

@@ -13,7 +13,7 @@ import io.reactivex.disposables.Disposable;
  * @author Miekir
  * 没加载框,不可手动取消的网络任务,直到Activity销毁
  * @deprecated 使用cancelable的观察者来更好控制任务和资源回收
- * {@link com.miekir.network.widget.observe.cancelable.CancelableObserver}
+ * {@link com.miekir.network.widget.observe.MvpObserver}
  */
 @Deprecated
 public abstract class NetStickyObserver<T> implements Observer<BaseResponse<T>> {
@@ -36,7 +36,6 @@ public abstract class NetStickyObserver<T> implements Observer<BaseResponse<T>>
 
     @Override
     public void onError(@NonNull Throwable e) {
-
         e.printStackTrace();
         onFailure(Code.FAILURE, e, ExceptionUtil.exceptionHandler(e));
     }

+ 1 - 1
network/src/main/java/com/miekir/network/widget/observe/sticky/ProgressNetStickyObserver.java

@@ -15,7 +15,7 @@ import io.reactivex.disposables.Disposable;
  * @author Miekir
  * 用于可见,但不可手动取消的网络任务
  * @deprecated 使用cancelable的观察者来更好控制任务和资源回收
- * {@link com.miekir.network.widget.observe.cancelable.CancelableObserver}
+ * {@link com.miekir.network.widget.observe.MvpObserver}
  */
 @Deprecated
 public abstract class ProgressNetStickyObserver<T> extends NetStickyObserver<T> {