詹子聪 5 tahun lalu
induk
melakukan
530955e923

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -9,7 +9,7 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".main.ui.home.HomeActivity"
+        <activity android:name=".ui.home.HomeActivity"
             android:configChanges="orientation|screenSize|keyboardHidden">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 1 - 1
app/src/main/java/com/miekir/aspectj/LoadingAspect.java

@@ -1,4 +1,4 @@
-package com.miekir.aspectj;
+package com.miekir.newmvp.aspectj;
 
 //import android.util.Log;
 //

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

@@ -1,19 +1,20 @@
-package com.miekir.newmvp.main.ui.home;
+package com.miekir.newmvp.ui.home;
 
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 
+import com.miekir.mvp.constant.MvpRepository;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 import com.miekir.newmvp.R;
-import com.miekir.newmvp.main.ui.home.article.presenter.ArticlePresenter;
+import com.miekir.newmvp.ui.home.article.presenter.ArticlePresenter;
 
 public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IArticleView {
 
     @InjectPresenter
-    ArticlePresenter mUserPresenter;
+    ArticlePresenter mArticlePresenter;
 
     @Override
     public int getLayoutId() {
@@ -31,7 +32,7 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
         switch (v.getId()) {
             case R.id.btn_task:
                 // 点击之后,后台执行耗时操作
-                mUserPresenter.doWork();
+                mArticlePresenter.with(MvpRepository.REPO_NET).fetchArticleData();
                 break;
             case R.id.btn_jump:
                 startActivity(new Intent(HomeActivity.this, HomeActivity.class));

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

@@ -1,4 +1,4 @@
-package com.miekir.newmvp.main.ui.home;
+package com.miekir.newmvp.ui.home;
 
 import com.miekir.mvp.view.IView;
 

+ 1 - 1
app/src/main/java/com/miekir/newmvp/main/ui/home/article/bean/ArticleBean.java

@@ -1,4 +1,4 @@
-package com.miekir.newmvp.main.ui.home.article.bean;
+package com.miekir.newmvp.ui.home.article.bean;
 
 /**
  * Copyright (C), 2019-2020, Miekir

+ 4 - 3
app/src/main/java/com/miekir/newmvp/main/ui/home/article/model/IArticleModel.java

@@ -1,6 +1,7 @@
-package com.miekir.newmvp.main.ui.home.article.model;
+package com.miekir.newmvp.ui.home.article.model;
 
-import com.miekir.newmvp.main.ui.home.article.bean.ArticleBean;
+import com.miekir.mvp.model.IModel;
+import com.miekir.newmvp.ui.home.article.bean.ArticleBean;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -9,7 +10,7 @@ import com.miekir.newmvp.main.ui.home.article.bean.ArticleBean;
  * @date 2020/11/20 14:55
  * Description:
  */
-public interface IArticleModel {
+public interface IArticleModel extends IModel {
     /**
      * 获取数据
      * @param callback 回调

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

@@ -1,8 +1,8 @@
-package com.miekir.newmvp.main.ui.home.article.model;
+package com.miekir.newmvp.ui.home.article.model;
 
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.model.BaseModel;
-import com.miekir.newmvp.main.ui.home.article.bean.ArticleBean;
+import com.miekir.newmvp.ui.home.article.bean.ArticleBean;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;

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

@@ -1,8 +1,8 @@
-package com.miekir.newmvp.main.ui.home.article.model;
+package com.miekir.newmvp.ui.home.article.model;
 
 import com.miekir.common.utils.LogTool;
 import com.miekir.mvp.model.BaseModel;
-import com.miekir.newmvp.main.ui.home.article.bean.ArticleBean;
+import com.miekir.newmvp.ui.home.article.bean.ArticleBean;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
@@ -23,6 +23,11 @@ public class NetArticleModel extends BaseModel implements IArticleModel {
     @Override
     public void getData(UserCallback callback) {
         Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {
+            try {
+                Thread.sleep(3000);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
             emitter.onNext("");
             emitter.onComplete();
         })

+ 65 - 0
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/ArticlePresenter.java

@@ -0,0 +1,65 @@
+package com.miekir.newmvp.ui.home.article.presenter;
+
+import com.miekir.mvp.constant.MvpRepository;
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.newmvp.ui.home.article.model.IArticleModel;
+import com.miekir.newmvp.ui.home.article.model.LocalArticleModel;
+import com.miekir.newmvp.ui.home.article.model.NetArticleModel;
+import com.miekir.newmvp.ui.home.IArticleView;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/11/18 14:27
+ * Description:
+ */
+public class ArticlePresenter extends BasePresenter<IArticleView> {
+    private IArticleModel mModel;
+    private int mCurrentType = MvpRepository.REPO_NET;
+
+    @Override
+    public void onInit() {
+        mModel = new NetArticleModel();
+    }
+
+    @Override
+    public void onTaskCancel() {
+        super.onTaskCancel();
+        mModel.onTaskCancel();
+    }
+
+    /**
+     * 设置当前model
+     * @param type model类型
+     */
+    public ArticlePresenter with(int type) {
+        if (mCurrentType == type) {
+            return this;
+        }
+        mCurrentType = type;
+        mModel.onTaskCancel();
+
+        switch (type) {
+            case MvpRepository.REPO_NET:
+                mModel = new NetArticleModel();
+                break;
+            case MvpRepository.REPO_FILE:
+                mModel = new LocalArticleModel();
+                break;
+            default:
+                break;
+        }
+        return this;
+    }
+
+    /**
+     * 让具体的Model去执行任务
+     */
+    public void fetchArticleData() {
+        mModel.getData(bean -> {
+            // 执行完毕,回调
+            post(view -> view.onArticleResult(bean.content));
+        });
+    }
+}

+ 3 - 37
app/src/main/java/com/miekir/newmvp/main/ui/home/article/presenter/ArticlePresenter.java

@@ -1,12 +1,8 @@
-package com.miekir.newmvp.main.ui.home.article.presenter;
+package com.miekir.newmvp.ui.home.article.presenter;
 
 import com.miekir.common.utils.LogTool;
-import com.miekir.mvp.constant.MvpRepository;
 import com.miekir.mvp.presenter.BasePresenter;
-import com.miekir.newmvp.main.ui.home.article.model.IArticleModel;
-import com.miekir.newmvp.main.ui.home.article.model.LocalArticleModel;
-import com.miekir.newmvp.main.ui.home.article.model.NetArticleModel;
-import com.miekir.newmvp.main.ui.home.IArticleView;
+import com.miekir.newmvp.ui.home.IArticleView;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
@@ -21,40 +17,10 @@ import io.reactivex.schedulers.Schedulers;
  * @date 2020/11/18 14:27
  * Description:
  */
-public class ArticlePresenter extends BasePresenter<IArticleView> {
-    private IArticleModel mModel;
+public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
 
     @Override
     public void onInit() {
-        mModel = new NetArticleModel();
-    }
-
-    /**
-     * 设置当前model
-     * @param type model类型
-     */
-    public ArticlePresenter with(int type) {
-        switch (type) {
-            case MvpRepository.REPO_NET:
-                mModel = new NetArticleModel();
-                break;
-            case MvpRepository.REPO_FILE:
-                mModel = new LocalArticleModel();
-                break;
-            default:
-                break;
-        }
-        return this;
-    }
-
-    /**
-     * 让具体的Model去执行任务
-     */
-    public void fetchUserData() {
-        mModel.getData(bean -> {
-            // 执行完毕,回调
-            post(view -> view.onArticleResult(bean.content));
-        });
     }
 
     /**

+ 1 - 1
app/src/main/res/layout/activity_main.xml

@@ -3,7 +3,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".main.ui.home.HomeActivity"
+    tools:context=".ui.home.HomeActivity"
     android:orientation="vertical"
     android:gravity="center_horizontal">
 

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

@@ -1,5 +1,7 @@
 package com.miekir.mvp.model;
 
+import com.miekir.common.utils.LogTool;
+
 import io.reactivex.disposables.CompositeDisposable;
 
 /**
@@ -14,5 +16,6 @@ public abstract class BaseModel {
 
     public void onTaskCancel() {
         mDisposableList.dispose();
+        LogTool.d(getClass().getName(), "model cancel");
     }
 }

+ 14 - 0
mvp/src/main/java/com/miekir/mvp/model/IModel.java

@@ -0,0 +1,14 @@
+package com.miekir.mvp.model;
+
+import io.reactivex.disposables.CompositeDisposable;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/11/20 15:08
+ * Description:
+ */
+public interface IModel {
+    void onTaskCancel();
+}

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

@@ -30,7 +30,9 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     private WeakReference<V> mViewReference;
     protected CompositeDisposable mDisposableList = new CompositeDisposable();
 
-    public BasePresenter() {}
+    public BasePresenter() {
+        onInit();
+    }
 
     /**
      * 安全地执行方法