ソースを参照

把BasePresenter注入到BaseModel

詹子聪 5 年 前
コミット
67ff378629

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

@@ -8,12 +8,12 @@ import android.view.View;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 import com.miekir.newmvp.R;
-import com.miekir.newmvp.ui.home.article.presenter.SimpleArticlePresenter;
+import com.miekir.newmvp.ui.home.article.presenter.ArticlePresenter;
 
 public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IArticleView {
 
     @InjectPresenter
-    SimpleArticlePresenter mArticlePresenter;
+    ArticlePresenter mArticlePresenter;
 
     @Override
     public int getLayoutId() {
@@ -34,7 +34,7 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
                 break;
             case R.id.btn_task:
                 // 点击之后,后台执行耗时操作
-                mArticlePresenter.doProgressWork();
+                mArticlePresenter.fetchArticleData();
                 break;
             default:
                 break;

+ 5 - 0
app/src/main/java/com/miekir/newmvp/ui/home/article/model/LocalArticleModel.java

@@ -2,6 +2,7 @@ package com.miekir.newmvp.ui.home.article.model;
 
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.model.BaseModel;
+import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.newmvp.ui.home.article.bean.ArticleBean;
 
 import io.reactivex.Observable;
@@ -20,6 +21,10 @@ import io.reactivex.schedulers.Schedulers;
 
 public class LocalArticleModel extends BaseModel implements IArticleModel {
 
+    public LocalArticleModel(BasePresenter<?> presenter) {
+        super(presenter);
+    }
+
     @Override
     public void getArticleData(ArticleCallback callback) {
         Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {

+ 5 - 0
app/src/main/java/com/miekir/newmvp/ui/home/article/model/NetArticleModel.java

@@ -2,6 +2,7 @@ package com.miekir.newmvp.ui.home.article.model;
 
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.model.BaseModel;
+import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.newmvp.ui.home.article.bean.ArticleBean;
 
 import io.reactivex.Observable;
@@ -20,6 +21,10 @@ import io.reactivex.schedulers.Schedulers;
 
 public class NetArticleModel extends BaseModel implements IArticleModel {
 
+    public NetArticleModel(BasePresenter<?> presenter) {
+        super(presenter);
+    }
+
     @Override
     public void getArticleData(ArticleCallback callback) {
         Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {

+ 8 - 0
mvp/src/main/java/com/miekir/mvp/model/BaseModel.java

@@ -1,6 +1,7 @@
 package com.miekir.mvp.model;
 
 import com.miekir.common.utils.LogTool;
+import com.miekir.mvp.presenter.BasePresenter;
 
 import io.reactivex.disposables.CompositeDisposable;
 
@@ -12,6 +13,12 @@ import io.reactivex.disposables.CompositeDisposable;
  * Description:
  */
 public abstract class BaseModel {
+    protected BasePresenter<?> mPresenter;
+
+    public BaseModel(BasePresenter<?> presenter) {
+        mPresenter = presenter;
+    }
+
     protected CompositeDisposable mProgressDisposableList = new CompositeDisposable();
     protected CompositeDisposable mBackDisposableList = new CompositeDisposable();
 
@@ -23,6 +30,7 @@ public abstract class BaseModel {
 
     public void onBackTaskCancel() {
         mBackDisposableList.dispose();
+        mPresenter = null;
         LogTool.d(getClass().getName(), "back model cancel");
     }
 }

+ 5 - 5
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -2,7 +2,7 @@ package com.miekir.mvp.presenter;
 
 import androidx.lifecycle.ViewModel;
 
-import com.miekir.mvp.model.IModel;
+import com.miekir.mvp.model.BaseModel;
 import com.miekir.mvp.view.IView;
 
 import java.lang.ref.WeakReference;
@@ -37,11 +37,11 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     /**
      * 有加载框的可取消任务, for model
      */
-    private List<IModel> mProgressModelList = new CopyOnWriteArrayList<>();
+    private List<BaseModel> mProgressModelList = new CopyOnWriteArrayList<>();
     /**
      * 后台没有加载框的可取消任务,for model
      */
-    private List<IModel> mBackModelList = new CopyOnWriteArrayList<>();
+    private List<BaseModel> mBackModelList = new CopyOnWriteArrayList<>();
 
     public BasePresenter() {
         PresenterHelper.initModelList(mProgressModelList, mBackModelList, this);
@@ -81,7 +81,7 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
      */
     private void onBackTaskCancel() {
         mBackDisposableList.dispose();
-        for (IModel model : mBackModelList) {
+        for (BaseModel model : mBackModelList) {
             model.onProgressTaskCancel();
         }
         mBackModelList.clear();
@@ -94,7 +94,7 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
         mProgressDisposableList.dispose();
         mProgressDisposableList = new CompositeDisposable();
 
-        for (IModel model : mProgressModelList) {
+        for (BaseModel model : mProgressModelList) {
             model.onProgressTaskCancel();
         }
         mProgressModelList.clear();

+ 13 - 5
mvp/src/main/java/com/miekir/mvp/presenter/PresenterHelper.java

@@ -1,9 +1,11 @@
 package com.miekir.mvp.presenter;
 
-import com.miekir.mvp.model.IModel;
+import com.miekir.mvp.model.BaseModel;
 import com.miekir.mvp.model.InjectModel;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 
 /**
@@ -19,7 +21,7 @@ public class PresenterHelper {
     /**
      * 初始化添加注解的变量
      */
-    public static  void initModelList(List<IModel> progressModelList, List<IModel> backModelList, BasePresenter<?> presenter) {
+    public static  void initModelList(List<BaseModel> progressModelList, List<BaseModel> backModelList, BasePresenter<?> presenter) {
         progressModelList.clear();
         // 这里可以获取到子类的成员变量
         Field[] fields = presenter.getClass().getDeclaredFields();
@@ -33,15 +35,21 @@ public class PresenterHelper {
             try {
                 field.setAccessible(true);
                 // 父类引用指向子类对象
-                Class<IModel> type = (Class<IModel>) field.getType();
-                IModel model = type.newInstance();
+                Class<BaseModel> type = (Class<BaseModel>) field.getType();
+
+                // 不带参数实例化BaseModel model = type.newInstance();
+                // 带参数的构造方法实例化
+                Class<?>[] parameterTypes = {BasePresenter.class};
+                Constructor<BaseModel> modelConstructor = type.getConstructor(parameterTypes);
+                BaseModel model = modelConstructor.newInstance(presenter);
                 field.set(presenter, model);
+
                 if (modelAnnotation.withProgress()) {
                     progressModelList.add(model);
                 } else {
                     backModelList.add(model);
                 }
-            } catch (IllegalAccessException | InstantiationException e) {
+            } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
                 e.printStackTrace();
             } catch (ClassCastException e) {
                 e.printStackTrace();

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

@@ -24,14 +24,14 @@ public abstract class MvpObserver<T> extends DisposableObserver<T> {
     public MvpObserver(final BasePresenter<?> presenter, final boolean withLoading) {
         mWithLoading = withLoading;
         mPresenter = presenter;
-        if (withLoading) {
+        if (mPresenter != null && withLoading) {
             presenter.showProgress();
         }
     }
 
     @Override
     public void onNext(T t) {
-        if (mWithLoading) {
+        if (mPresenter != null && mWithLoading) {
             mPresenter.hideProgress();
         }
         onSuccess(Code.SUCCESS, t);

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

@@ -32,7 +32,7 @@ public abstract class NetMvpObserver<T> extends DisposableObserver<BaseResponse<
 
     @Override
     public void onNext(@NonNull BaseResponse<T> response) {
-        if (mWithLoading) {
+        if (mPresenter != null && mWithLoading) {
             mPresenter.hideProgress();
         }
         try {
@@ -54,7 +54,7 @@ public abstract class NetMvpObserver<T> extends DisposableObserver<BaseResponse<
 
     @Override
     public void onError(@NonNull Throwable e) {
-        if (mWithLoading) {
+        if (mPresenter != null && mWithLoading) {
             mPresenter.hideProgress();
         }
         e.printStackTrace();