詹子聪 5 лет назад
Родитель
Сommit
40c0b5b8ac

+ 3 - 0
app/build.gradle

@@ -26,4 +26,7 @@ dependencies {
     androidTestImplementation 'androidx.test.ext:junit:1.1.0'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
     implementation project(path: ':mvp')
+
+    // 查看内存泄露
+    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.1'
 }

+ 0 - 14
app/src/main/java/com/miekir/newmvp/ITestView.java

@@ -1,14 +0,0 @@
-package com.miekir.newmvp;
-
-import com.miekir.mvp.view.IView;
-
-/**
- * Copyright (C), 2019-2020, Miekir
- *
- * @author Miekir
- * @date 2020/10/6 20:54
- * Description:
- */
-public interface ITestView extends IView {
-    void onLoginResult(int code, String msg);
-}

+ 5 - 13
app/src/main/java/com/miekir/newmvp/MainActivity.java

@@ -9,9 +9,9 @@ import com.miekir.mvp.base.DataResult;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMVPActivity;
 
-public class MainActivity extends BaseMVPActivity implements ITestView {
+public class MainActivity extends BaseMVPActivity {
     @InjectPresenter
-    TestPresenter presenter;
+    TestPresenter1 presenter1;
 
 
     @Override
@@ -27,27 +27,19 @@ public class MainActivity extends BaseMVPActivity implements ITestView {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        presenter.go();
         findViewById(R.id.view_test).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                presenter.go();
+                presenter1.go();
             }
         });
     }
 
     @Override
     public void onDataResult(DataResult result) {
-        Log.e("mmmmm", "code: " + result.getCode());
+        Log.e("data_result", "code: " + result.getCode());
+        
     }
 
-    @Override
-    public void onLoginResult(final int code, String msg) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
 
-            }
-        });
-    }
 }

+ 36 - 0
app/src/main/java/com/miekir/newmvp/TestBean1.java

@@ -0,0 +1,36 @@
+package com.miekir.newmvp;
+
+import com.miekir.mvp.bean.BaseBean;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/10/7 11:35
+ * Description:
+ */
+public class TestBean1 extends BaseBean {
+    private int age;
+    private String name;
+
+    public TestBean1(int age, String name) {
+        this.age = age;
+        this.name = name;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 36 - 0
app/src/main/java/com/miekir/newmvp/TestBean2.java

@@ -0,0 +1,36 @@
+package com.miekir.newmvp;
+
+import com.miekir.mvp.bean.BaseBean;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/10/7 11:35
+ * Description:
+ */
+public class TestBean2 extends BaseBean {
+    private String name;
+    private String address;
+
+    public TestBean2(String name, String address) {
+        this.name = name;
+        this.address = address;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+}

+ 2 - 3
app/src/main/java/com/miekir/newmvp/TestPresenter.java

@@ -1,6 +1,5 @@
 package com.miekir.newmvp;
 
-import com.miekir.mvp.base.DataResult;
 import com.miekir.mvp.presenter.BasePresenter;
 
 /**
@@ -10,7 +9,7 @@ import com.miekir.mvp.presenter.BasePresenter;
  * @date 2020/10/6 20:53
  * Description:
  */
-public class TestPresenter extends BasePresenter<ITestView> {
+public class TestPresenter1 extends BasePresenter<TestBean1> {
     public void go() {
         new Thread(new Runnable() {
             @Override
@@ -18,7 +17,7 @@ public class TestPresenter extends BasePresenter<ITestView> {
                 try {
                     Thread.sleep(10000);
                     //getView().onLoginResult(3, "ddd");
-                    getLiveData().postValue(new DataResult(0, "dd"));
+                    post(0, "test", new TestBean1(3, "Jason"));
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 12 - 2
mvp/src/main/java/com/miekir/mvp/base/DataResult.java

@@ -7,13 +7,23 @@ package com.miekir.mvp.base;
  * @date 2020/10/6 21:30
  * Description:
  */
-public class DataResult {
+public class DataResult<B> {
     private int code;
     private String message;
+    private B bean;
 
-    public DataResult(int code, String message) {
+    public DataResult(int code, String message, B bean) {
         this.code = code;
         this.message = message;
+        this.bean = bean;
+    }
+
+    public B getBean() {
+        return bean;
+    }
+
+    public void setBean(B bean) {
+        this.bean = bean;
     }
 
     public int getCode() {

+ 11 - 0
mvp/src/main/java/com/miekir/mvp/bean/BaseBean.java

@@ -0,0 +1,11 @@
+package com.miekir.mvp.bean;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/10/7 11:19
+ * Description:
+ */
+public class BaseBean {
+}

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

@@ -3,35 +3,35 @@ package com.miekir.mvp.presenter;
 import androidx.lifecycle.MutableLiveData;
 
 import com.miekir.mvp.base.DataResult;
-import com.miekir.mvp.view.IView;
+import com.miekir.mvp.bean.BaseBean;
 
 import java.lang.ref.WeakReference;
 
-public abstract class BasePresenter<V extends IView> {
-    private WeakReference<V> wrf;
+public abstract class BasePresenter<B extends BaseBean> {
 
-    private MutableLiveData<DataResult> mLiveData;
-    public void attachView(V view) {
-        wrf = new WeakReference<V>(view);
-    }
+    private WeakReference<MutableLiveData<DataResult>> mLiveData;
 
     public void setLiveData(MutableLiveData<DataResult> liveData) {
-        mLiveData = liveData;
+        mLiveData = new WeakReference<>(liveData);
     }
 
-    public V getView() {
-        return wrf == null ? null : wrf.get();
-    }
+    public void post(int code, String msg, B dataBean) {
+        if (mLiveData == null) {
+            return;
+        }
 
+        MutableLiveData<DataResult> liveData = mLiveData.get();
+        if (liveData == null) {
+            return;
+        }
 
-    public MutableLiveData<DataResult> getLiveData() {
-        return mLiveData;
+        liveData.postValue(new DataResult(code, msg, dataBean));
     }
 
     public void detachView() {
-        if (wrf != null) {
-            wrf.clear();
-            wrf = null;
+        if (mLiveData != null) {
+            mLiveData.clear();
+            mLiveData = null;
         }
     }
 }

+ 1 - 2
mvp/src/main/java/com/miekir/mvp/view/BaseMVPActivity.java

@@ -1,7 +1,6 @@
 package com.miekir.mvp.view;
 
 import android.os.Bundle;
-import android.util.Log;
 
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Observer;
@@ -54,7 +53,7 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
 
                     Class<? extends BasePresenter> type = (Class<? extends BasePresenter>) field.getType();
                     BasePresenter mInjectPresenter = type.newInstance();
-                    mInjectPresenter.attachView(this);
+                    //mInjectPresenter.attachView(this);
                     mInjectPresenter.setLiveData(liveData);
                     field.setAccessible(true);
                     field.set(this, mInjectPresenter);

+ 1 - 1
mvp/src/main/java/com/miekir/mvp/view/BaseMVPFragment.java

@@ -39,7 +39,7 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
                     Class<? extends BasePresenter> type = (Class<? extends BasePresenter>) field.getType();
                     BasePresenter mInjectPresenter = type.newInstance();
                     // todo
-                    mInjectPresenter.attachView(this);
+                    //mInjectPresenter.attachView(this);
                     field.setAccessible(true);
                     field.set(this, mInjectPresenter);
                     mInjectPresenters.add(mInjectPresenter);