Przeglądaj źródła

剩余错误推送的问题

詹子聪 5 lat temu
rodzic
commit
ff965095e3

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

@@ -43,7 +43,7 @@ public class MainActivity extends BaseMvpActivity {
         });
     }
 
-    @DataMethod
+    @DataMethod(dataSource = TestPresenter.SOURCE_LOGIN_RESULT)
     public void onDataCome(int code, String msg, List<TestBean1> data) {
         Toast.makeText(this, data.get(0).getName(), Toast.LENGTH_SHORT).show();
     }

+ 1 - 4
app/src/main/java/com/miekir/newmvp/TestModel.java

@@ -1,8 +1,5 @@
 package com.miekir.newmvp;
 
-import com.miekir.mvp.constant.DataSource;
-import com.miekir.mvp.model.MvpModel;
-
 /**
  * Copyright (C), 2019-2020, Miekir
  *
@@ -10,7 +7,7 @@ import com.miekir.mvp.model.MvpModel;
  * @date 2020/11/14 14:57
  * Description:
  */
-@MvpModel(dataSource = DataSource.DATABASE)
+
 public class TestModel {
 
 }

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

@@ -1,8 +1,7 @@
 package com.miekir.newmvp;
 
 import com.miekir.mvp.base.NeedLoading;
-import com.miekir.mvp.constant.DataSource;
-import com.miekir.mvp.model.MvpModel;
+import com.miekir.mvp.model.DataSource;
 import com.miekir.mvp.presenter.BasePresenter;
 
 import java.util.ArrayList;
@@ -16,6 +15,7 @@ import java.util.List;
  * Description:注意ViewModel的类必须是public的,否则无法创建实例
  */
 public class TestPresenter extends BasePresenter {
+    public static final int SOURCE_LOGIN_RESULT = 3;
 
     @Override
     public void init() {
@@ -31,8 +31,8 @@ public class TestPresenter extends BasePresenter {
                     Thread.sleep(5000);
                     List<TestBean1> testBean1List = new ArrayList<>();
                     testBean1List.add(new TestBean1(3, "ViewModel Jason"));
-                    // todo 这里还有问题,就是post的错误没法被正确的方法接收
-                    postFail("错误", new ArrayList<TestBean2>());
+                    // 这里还有问题,就是post的错误没法被正确的方法接收
+                    postFail("错误", SOURCE_LOGIN_RESULT);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 0 - 2
mvp/src/main/java/com/miekir/mvp/model/DataMethod.java

@@ -1,7 +1,5 @@
 package com.miekir.mvp.model;
 
-import com.miekir.mvp.constant.DataSource;
-
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;

+ 1 - 1
mvp/src/main/java/com/miekir/mvp/constant/DataSource.java

@@ -1,4 +1,4 @@
-package com.miekir.mvp.constant;
+package com.miekir.mvp.model;
 
 /**
  * Copyright (C), 2019-2020, Miekir

+ 0 - 19
mvp/src/main/java/com/miekir/mvp/model/MvpModel.java

@@ -1,19 +0,0 @@
-package com.miekir.mvp.model;
-
-import com.miekir.mvp.constant.DataSource;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- *
- * @author zhan
- * @date 2019/8/19
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface MvpModel {
-    int dataSource() default DataSource.DEFAULT;
-}

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

@@ -5,9 +5,8 @@ import androidx.lifecycle.ViewModel;
 
 import com.miekir.mvp.bean.DataResult;
 import com.miekir.mvp.constant.BaseMvpResponse;
-import com.miekir.mvp.constant.DataSource;
+import com.miekir.mvp.model.DataSource;
 import com.miekir.mvp.constant.DialogAction;
-import com.miekir.mvp.model.MvpModel;
 
 /**
  * Copyright (C), 2019-2020, Miekir
@@ -18,11 +17,6 @@ import com.miekir.mvp.model.MvpModel;
  */
 public abstract class BasePresenter extends ViewModel {
     //private ThreadLocal<Integer> mThreadLocal = new ThreadLocal<>();
-
-    public BasePresenter() {
-        // todo 是否要初始化
-    }
-
     /**
      * ViewModel的生命周期和Activity保持一致;在onStart()、onResume()、onPause()时调用LiveData的setValue才会通知观察者
      * liveData在ViewModel(Presenter)创建,然后提供方法给Activity获取,方便取消观察
@@ -62,35 +56,20 @@ public abstract class BasePresenter extends ViewModel {
         dialogLiveData.postValue(new DataResult(0, null, null, DialogAction.DIALOG_DISMISS));
     }
 
-    public void post(int responseCode, String message, Object dataBean, Class<?> clazz) {
+    public void post(int responseCode, String message, Object dataBean, int sourceCode) {
         if (liveData == null) {
             return;
         }
 
-        int sourceCode = DataSource.DEFAULT;
-        if (clazz != null) {
-            MvpModel model = clazz.getAnnotation(MvpModel.class);
-            if (model != null) {
-                sourceCode = model.dataSource();
-            }
-        }
         liveData.postValue(new DataResult(responseCode, message, dataBean, sourceCode));
     }
 
-    public void postSuccess(Object dataBean) {
-        post(BaseMvpResponse.SUCCESS, "", dataBean, null);
-    }
-
-    public void postSuccess(Object dataBean, Class<?> modelClass) {
-        post(BaseMvpResponse.SUCCESS, "", dataBean, modelClass);
-    }
-
-    public void postFail(String message, Object dataBean) {
-        post(BaseMvpResponse.FAIL, message, dataBean, null);
+    public void postSuccess(Object dataBean, int sourceCode) {
+        post(BaseMvpResponse.SUCCESS, "", dataBean, sourceCode);
     }
 
-    public void postFail(String message, Object dataBean, Class<?> modelClass) {
-        post(BaseMvpResponse.FAIL, message, dataBean, modelClass);
+    public void postFail(String message, int sourceCode) {
+        post(BaseMvpResponse.FAIL, message, null, sourceCode);
     }
 
     public void detachView() {

+ 12 - 9
mvp/src/main/java/com/miekir/mvp/view/ViewHelper.java

@@ -9,7 +9,7 @@ import androidx.lifecycle.Observer;
 import com.miekir.mvp.base.BaseActivity;
 import com.miekir.mvp.bean.DataResult;
 import com.miekir.mvp.constant.BaseMvpResponse;
-import com.miekir.mvp.constant.DataSource;
+import com.miekir.mvp.model.DataSource;
 import com.miekir.mvp.constant.DialogAction;
 import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.mvp.model.DataMethod;
@@ -183,15 +183,12 @@ public class ViewHelper {
      * @param result
      */
     public static void handleDataResult(Object object, List<Method> mDataMethodList, DataResult result) {
-        Class objParamClass = result.getBean().getClass();
-        for (Method method : mDataMethodList) {
-
-            // 判断方法的第三个参数类型是否是回调对象的父类
-            Class methodParamClass = method.getParameterTypes()[2];
-            if (!methodParamClass.isAssignableFrom(objParamClass)) {
-                continue;
-            }
+        Class<?> objParamClass = null;
+        if (result.getBean() != null) {
+            objParamClass = result.getBean().getClass();
+        }
 
+        for (Method method : mDataMethodList) {
             // 判断数据来源是否一致
             int dataSource = DataSource.DEFAULT;
             DataMethod dataMethod = method.getAnnotation(DataMethod.class);
@@ -202,6 +199,12 @@ public class ViewHelper {
                 continue;
             }
 
+            // 判断方法的第三个参数类型是否是回调对象的父类
+            Class<?> methodParamClass = method.getParameterTypes()[2];
+            if (objParamClass != null && !methodParamClass.isAssignableFrom(objParamClass)) {
+                continue;
+            }
+
             try {
                 method.invoke(object, result.getResponseCode(), result.getMessage(), result.getBean());
             } catch (Exception e) {