소스 검색

可取消的任务

詹子聪 5 년 전
부모
커밋
abd20da446

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

@@ -2,9 +2,7 @@ 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.CancelConsumer;
-import com.miekir.network.widget.observe.cancelable.common.CancelableObserver;
-import com.miekir.network.widget.observe.sticky.common.LoadingStickyObserver;
+import com.miekir.network.widget.observe.cancelable.CancelableObserver;
 import com.miekir.newmvp.ui.home.IArticleView;
 
 import io.reactivex.Observable;
@@ -59,19 +57,17 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
      * 有进度,可以手动取消的任务
      */
     public void doProgressWork() {
-        LambdaObserver<String> disposable = new CancelableObserver<String>(this, new CancelConsumer<String>(this) {
+        LambdaObserver<String> disposable = new CancelableObserver<String>(this) {
             @Override
-            public void onResult(String s) {
-                LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
-                post(view -> view.onArticleResult("result"));
+            public void onSuccess(int code, String s) {
+
             }
-        }, new CancelConsumer<Throwable>(this) {
+
             @Override
-            public void onResult(Throwable throwable) {
-                LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
-                post(view -> view.onArticleResult("result"));
+            public void onFailure(int code, Throwable e, String errMsg) {
+
             }
-        }).getCancelableObserver();
+        }.getDisposal();
 
         Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {
@@ -88,32 +84,4 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
 
         mProgressDisposableList.add(disposable);
     }
-
-    /**
-     * 直接在Presenter执行任务
-     */
-    public void doStickyWork() {
-        Observable.create((ObservableOnSubscribe<String>) emitter -> {
-            try {
-                Thread.sleep(5000);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            emitter.onNext("");
-            emitter.onComplete();
-        })
-        .subscribeOn(Schedulers.io())
-        .observeOn(AndroidSchedulers.mainThread())
-        .subscribe(new LoadingStickyObserver<String>(this) {
-            @Override
-            public void onSuccess(String result) {
-                post(view -> view.onArticleResult("result"));
-            }
-
-            @Override
-            public void onFailure(int code, Throwable e, String errMsg) {
-                post(view -> view.onArticleResult("result"));
-            }
-        });
-    }
 }

+ 1 - 1
network/src/main/java/com/miekir/network/constant/Code.java

@@ -7,7 +7,7 @@ package com.miekir.network.constant;
 
 public class Code {
 
-    public static final int COMMON = -1;
+    public static final int FAILURE = -1;
     public static final int SUCCESS = 0;
 
     /**

+ 1 - 11
network/src/main/java/com/miekir/network/widget/observe/cancelable/CancelConsumer.java

@@ -1,7 +1,5 @@
 package com.miekir.network.widget.observe.cancelable;
 
-import com.miekir.mvp.presenter.BasePresenter;
-
 import io.reactivex.functions.Consumer;
 
 /**
@@ -11,17 +9,9 @@ import io.reactivex.functions.Consumer;
  * @date 2020/11/21 17:40
  * Description:
  */
-public abstract class CancelConsumer<T> implements Consumer<T> {
-
-    private BasePresenter<?> mPresenter;
-
-    public CancelConsumer(BasePresenter<?> presenter) {
-        this.mPresenter = presenter;
-    }
-
+public abstract class CancelableConsumer<T> implements Consumer<T> {
     @Override
     public void accept(T t) throws Exception {
-        mPresenter.hideProgress();
         onResult(t);
     }
 

+ 58 - 0
network/src/main/java/com/miekir/network/widget/observe/cancelable/CancelableObserver.java

@@ -0,0 +1,58 @@
+package com.miekir.network.widget.observe.cancelable;
+
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.constant.Code;
+import com.miekir.network.utils.ExceptionUtil;
+
+import io.reactivex.internal.functions.Functions;
+import io.reactivex.internal.observers.LambdaObserver;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/11/21 17:25
+ * Description:
+ * 可见可手动取消的任务
+ */
+public abstract class CancelableObserver<T> {
+    private CancelableConsumer<? super T> onNext;
+    private CancelableConsumer<? super Throwable> onError;
+
+    public CancelableObserver(final BasePresenter<?> presenter) {
+        presenter.showProgress();
+        onNext = new CancelableConsumer<T>() {
+            @Override
+            public void onResult(T t) {
+                presenter.hideProgress();
+                onSuccess(Code.SUCCESS, t);
+            }
+        };
+        onError = new CancelableConsumer<Throwable>() {
+            @Override
+            public void onResult(Throwable throwable) {
+                presenter.hideProgress();
+                onFailure(Code.FAILURE, throwable, ExceptionUtil.exceptionHandler(throwable));
+            }
+        };
+    }
+
+    /**
+     * 成功回调
+     * @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);
+
+    public LambdaObserver<T> getDisposal() {
+        return new LambdaObserver<T>(onNext, onError, Functions.EMPTY_ACTION, Functions.emptyConsumer());
+    }
+}

+ 0 - 30
network/src/main/java/com/miekir/network/widget/observe/cancelable/common/CancelableObserver.java

@@ -1,30 +0,0 @@
-package com.miekir.network.widget.observe.cancelable.common;
-
-import com.miekir.mvp.presenter.BasePresenter;
-import com.miekir.network.widget.observe.cancelable.CancelConsumer;
-
-import io.reactivex.internal.functions.Functions;
-import io.reactivex.internal.observers.LambdaObserver;
-
-/**
- * Copyright (C), 2019-2020, Miekir
- *
- * @author Miekir
- * @date 2020/11/21 17:25
- * Description:
- * 可见可手动取消的任务
- */
-public class CancelableObserver<T> {
-    private CancelConsumer<? super T> onNext;
-    private CancelConsumer<? super Throwable> onError;
-
-    public CancelableObserver(BasePresenter<?> presenter, CancelConsumer<? super T> onNext, CancelConsumer<? super Throwable> onError) {
-        presenter.showProgress();
-        this.onNext = onNext;
-        this.onError = onError;
-    }
-
-    public LambdaObserver<T> getCancelableObserver() {
-        return new LambdaObserver<T>(onNext, onError, Functions.EMPTY_ACTION, Functions.emptyConsumer());
-    }
-}

+ 14 - 3
network/src/main/java/com/miekir/network/widget/observe/sticky/net/NetStickyObserver.java

@@ -1,4 +1,4 @@
-package com.miekir.network.widget.observe.sticky.net;
+package com.miekir.network.widget.observe.sticky;
 
 import com.miekir.network.base.BaseResponse;
 import com.miekir.network.constant.Code;
@@ -27,7 +27,7 @@ public abstract class NetStickyObserver<T> implements Observer<BaseResponse<T>>
             }
         } catch (Exception e) {
             e.printStackTrace();
-            onFailure(Code.COMMON, new Exception("null"), null);
+            onFailure(Code.FAILURE, new Exception("null"), null);
         }
     }
 
@@ -35,7 +35,7 @@ public abstract class NetStickyObserver<T> implements Observer<BaseResponse<T>>
     public void onError(@NonNull Throwable e) {
 
         e.printStackTrace();
-        onFailure(Code.COMMON, e, ExceptionUtil.exceptionHandler(e));
+        onFailure(Code.FAILURE, e, ExceptionUtil.exceptionHandler(e));
     }
 
     @Override
@@ -48,7 +48,18 @@ public abstract class NetStickyObserver<T> implements Observer<BaseResponse<T>>
 
     }
 
+    /**
+     * 成功
+     * @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);
 }

+ 4 - 5
network/src/main/java/com/miekir/network/widget/observe/BackupObserver.java

@@ -1,10 +1,9 @@
-package com.miekir.network.widget.observe;
+package com.miekir.network.widget.observe.sticky;
 
 import android.content.Context;
 
 import com.miekir.network.R;
 import com.miekir.network.widget.CustomProgressDialog;
-import com.miekir.network.widget.observe.sticky.net.NetStickyObserver;
 
 import io.reactivex.annotations.NonNull;
 import io.reactivex.disposables.Disposable;
@@ -17,16 +16,16 @@ import io.reactivex.disposables.Disposable;
  * 用于可见,但不可手动取消的网络任务
  */
 
-public abstract class BackupObserver<T> extends NetStickyObserver<T> {
+public abstract class ProgressNetStickyObserver<T> extends NetStickyObserver<T> {
     private CustomProgressDialog mProgressDialog;
     private Context mContext;
     private String mText;
 
-    public BackupObserver(Context context) {
+    public ProgressNetStickyObserver(Context context) {
         this(context, context.getString(R.string.network_loading));
     }
 
-    public BackupObserver(Context context, String text) {
+    public ProgressNetStickyObserver(Context context, String text) {
         this.mContext = context;
         this.mText = text;
     }

+ 0 - 45
network/src/main/java/com/miekir/network/widget/observe/sticky/common/LoadingStickyObserver.java

@@ -1,45 +0,0 @@
-package com.miekir.network.widget.observe.sticky.common;
-
-import com.miekir.mvp.presenter.BasePresenter;
-
-import io.reactivex.annotations.NonNull;
-import io.reactivex.disposables.Disposable;
-
-/**
- * 进度条观察者
- * 需要进度条时,调用onSubscribe同时显示进度条,
- * 流程走到onComplete/onError时隐藏进度条。
- * @author Miekir
- * 变为发送通知增加dialog显示次数
- * 有加载框,但不可手动取消的任务
- */
-
-public abstract class LoadingStickyObserver<T> extends StickyObserver<T> {
-    private BasePresenter<?> mPresenter;
-
-    public LoadingStickyObserver(BasePresenter<?> presenter) {
-        mPresenter = presenter;
-    }
-
-    @Override
-    public void onSubscribe(@NonNull Disposable d) {
-        super.onSubscribe(d);
-        if (d.isDisposed()) {
-            return;
-        }
-
-        mPresenter.showProgress();
-    }
-
-    @Override
-    public void onComplete() {
-        super.onComplete();
-        mPresenter.hideProgress();
-    }
-
-    @Override
-    public void onError(@NonNull Throwable e) {
-        super.onError(e);
-        mPresenter.hideProgress();
-    }
-}

+ 0 - 47
network/src/main/java/com/miekir/network/widget/observe/sticky/common/StickyObserver.java

@@ -1,47 +0,0 @@
-package com.miekir.network.widget.observe.sticky.common;
-
-import com.miekir.network.constant.Code;
-import com.miekir.network.utils.ExceptionUtil;
-
-import io.reactivex.Observer;
-import io.reactivex.annotations.NonNull;
-import io.reactivex.disposables.Disposable;
-
-/**
- * 返回结果处理
- * @author Miekir
- * 用于没加载框,不可手动取消的任务
- */
-
-public abstract class StickyObserver<T> implements Observer<T> {
-
-    @Override
-    public void onNext(@NonNull T response) {
-        try {
-            onSuccess(response);
-        } catch (Exception e) {
-            e.printStackTrace();
-            onFailure(Code.COMMON, new Exception("null"), null);
-        }
-    }
-
-    @Override
-    public void onError(@NonNull Throwable e) {
-        e.printStackTrace();
-        onFailure(Code.COMMON, e, ExceptionUtil.exceptionHandler(e));
-    }
-
-    @Override
-    public void onComplete() {
-
-    }
-
-    @Override
-    public void onSubscribe(@NonNull Disposable d) {
-
-    }
-
-    public abstract void onSuccess(T result);
-
-    public abstract void onFailure(int code, Throwable e, String errMsg);
-}

+ 0 - 45
network/src/main/java/com/miekir/network/widget/observe/sticky/net/LoadingNetStickyObserver.java

@@ -1,45 +0,0 @@
-package com.miekir.network.widget.observe.sticky.net;
-
-import com.miekir.mvp.presenter.BasePresenter;
-
-import io.reactivex.annotations.NonNull;
-import io.reactivex.disposables.Disposable;
-
-/**
- * 进度条观察者
- * 需要进度条时,调用onSubscribe同时显示进度条,
- * 流程走到onComplete/onError时隐藏进度条。
- * @author Miekir
- * 变为发送通知增加dialog显示次数
- * 有加载框,但不可手动取消的网络任务
- */
-
-public abstract class LoadingNetStickyObserver<T> extends NetStickyObserver<T> {
-    private BasePresenter<?> mPresenter;
-
-    public LoadingNetStickyObserver(BasePresenter<?> presenter) {
-        mPresenter = presenter;
-    }
-
-    @Override
-    public void onSubscribe(@NonNull Disposable d) {
-        super.onSubscribe(d);
-        if (d.isDisposed()) {
-            return;
-        }
-
-        mPresenter.showProgress();
-    }
-
-    @Override
-    public void onComplete() {
-        super.onComplete();
-        mPresenter.hideProgress();
-    }
-
-    @Override
-    public void onError(@NonNull Throwable e) {
-        super.onError(e);
-        mPresenter.hideProgress();
-    }
-}