詹子聪 5 سال پیش
والد
کامیت
8a4f132e11

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

@@ -11,6 +11,7 @@ import com.miekir.mvp.presenter.DataMethod;
 import com.miekir.mvp.presenter.InjectViewModel;
 import com.miekir.mvp.view.model.BaseMVPActivity;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class MainActivity extends BaseMVPActivity {
@@ -53,4 +54,9 @@ public class MainActivity extends BaseMVPActivity {
     public void onDataCome1(int code, String msg, List<TestBean1> data, int source) {
         Toast.makeText(this, data.get(0).getName(), Toast.LENGTH_SHORT).show();
     }
+
+    @DataMethod
+    public void onDataCome2(int code, String msg, ArrayList<TestBean1> data, int source) {
+        Toast.makeText(this, data.get(0).getName(), Toast.LENGTH_SHORT).show();
+    }
 }

+ 9 - 10
mvp/src/main/java/com/miekir/mvp/view/model/BaseMVPActivity.java

@@ -30,6 +30,7 @@ import java.util.List;
  */
 public abstract class BaseMVPActivity extends BaseActivity implements IView {
     private List<Method> mDataMethodList = new ArrayList<>();
+    private List<String> objectParamsList = new ArrayList<>();
     private List<BaseViewModel> mInjectPresenters;
 
     @Override
@@ -57,16 +58,6 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
                     DataMethod dataMethod = method.getAnnotation(DataMethod.class);
                     if (dataMethod != null) {
 
-                        Field signatureField = null;
-                        try {
-                            signatureField = Method.class.getDeclaredField("signature");
-                            signatureField.setAccessible(true);
-                            String signature = signatureField.get(method).toString();
-                            //System.out.println("method signature: " + signature);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-
                         int length = method.getParameterTypes().length;
                         if (length != 4) {
                             throw new AssertionError("DataMethod参数数量必须为4个");
@@ -86,6 +77,13 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
                             throw new AssertionError("DataMethod第2个参数必须为" + messageType);
                         }
 
+                        // 第三个参数的类型
+                        String objTypeName = method.getGenericParameterTypes()[2].toString();
+                        if (objectParamsList.contains(objTypeName)) {
+                            throw new AssertionError("第3个参数为" + objTypeName + "的方法有多个,应该合并为一个方法");
+                        }
+                        objectParamsList.add(objTypeName);
+
                         // 数据来源
                         String fourthType = method.getParameterTypes()[3].getSimpleName();
                         String sourceCodeType = int.class.getSimpleName();
@@ -155,6 +153,7 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
         }
 
         mDataMethodList.clear();
+        objectParamsList.clear();
     }
 
     /**

+ 9 - 10
mvp/src/main/java/com/miekir/mvp/view/model/BaseMVPFragment.java

@@ -33,6 +33,7 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
     protected boolean isUIVisible;
 
     private List<Method> mDataMethodList = new ArrayList<>();
+    private List<String> objectParamsList = new ArrayList<>();
     private List<BaseViewModel> mInjectPresenters;
 
     @Override
@@ -58,16 +59,6 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
                     DataMethod dataMethod = method.getAnnotation(DataMethod.class);
                     if (dataMethod != null) {
 
-                        Field signatureField = null;
-                        try {
-                            signatureField = Method.class.getDeclaredField("signature");
-                            signatureField.setAccessible(true);
-                            String signature = signatureField.get(method).toString();
-                            //System.out.println("method signature: " + signature);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-
                         int length = method.getParameterTypes().length;
                         if (length != 4) {
                             throw new AssertionError("DataMethod参数数量必须为4个");
@@ -87,6 +78,13 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
                             throw new AssertionError("DataMethod第2个参数必须为" + messageType);
                         }
 
+                        // 第三个参数的类型
+                        String objTypeName = method.getGenericParameterTypes()[2].toString();
+                        if (objectParamsList.contains(objTypeName)) {
+                            throw new AssertionError("第3个参数为" + objTypeName + "的方法有多个,应该合并为一个方法");
+                        }
+                        objectParamsList.add(objTypeName);
+
                         // 数据来源
                         String fourthType = method.getParameterTypes()[3].getSimpleName();
                         String sourceCodeType = int.class.getSimpleName();
@@ -189,6 +187,7 @@ public abstract class BaseMVPFragment extends BaseFragment implements IView {
         }
 
         mDataMethodList.clear();
+        objectParamsList.clear();
     }
 
     private void onDataResult(DataResult result) {