|
|
@@ -1,6 +1,7 @@
|
|
|
package com.miekir.mvp.view;
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
+import android.util.Log;
|
|
|
|
|
|
import androidx.lifecycle.MutableLiveData;
|
|
|
import androidx.lifecycle.Observer;
|
|
|
@@ -8,9 +9,12 @@ import androidx.lifecycle.Observer;
|
|
|
import com.miekir.mvp.base.BaseActivity;
|
|
|
import com.miekir.mvp.base.DataResult;
|
|
|
import com.miekir.mvp.presenter.BasePresenter;
|
|
|
+import com.miekir.mvp.presenter.DataMethod;
|
|
|
import com.miekir.mvp.presenter.InjectPresenter;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -27,6 +31,7 @@ import java.util.List;
|
|
|
*/
|
|
|
public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
|
|
|
+ private List<Method> mDataMethodList = new ArrayList<>();
|
|
|
private List<BasePresenter> mInjectPresenters;
|
|
|
|
|
|
@Override
|
|
|
@@ -34,6 +39,31 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
mInjectPresenters = new ArrayList<>();
|
|
|
|
|
|
+ // 查找回调方法
|
|
|
+ if (mDataMethodList.size() == 0) {
|
|
|
+ Method[] methods = null;
|
|
|
+ try {
|
|
|
+ // This is faster than getMethods, especially when subscribers are fat classes like Activities
|
|
|
+ methods = getClass().getDeclaredMethods();
|
|
|
+ } catch (Throwable th) {
|
|
|
+ // Workaround for java.lang.NoClassDefFoundError, see https://github.com/greenrobot/EventBus/issues/149
|
|
|
+ try {
|
|
|
+ methods = getClass().getDeclaredMethods();
|
|
|
+ } catch (LinkageError error) { // super class of NoClassDefFoundError to be a bit more broad...
|
|
|
+ error.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (methods != null && methods.length > 0) {
|
|
|
+ for (Method method : methods) {
|
|
|
+ DataMethod dataMethod = method.getAnnotation(DataMethod.class);
|
|
|
+ if (dataMethod != null) {
|
|
|
+ mDataMethodList.add(method);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 这里可以获取到子类的成员变量
|
|
|
Field[] fields = this.getClass().getDeclaredFields();
|
|
|
for (Field field : fields) {
|
|
|
@@ -62,7 +92,7 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
e.printStackTrace();
|
|
|
} catch (InstantiationException e) {
|
|
|
e.printStackTrace();
|
|
|
- }catch (ClassCastException e){
|
|
|
+ } catch (ClassCastException e) {
|
|
|
e.printStackTrace();
|
|
|
throw new RuntimeException("SubClass must extends Class:BasePresenter");
|
|
|
}
|
|
|
@@ -78,9 +108,17 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
}
|
|
|
mInjectPresenters.clear();
|
|
|
mInjectPresenters = null;
|
|
|
+ mDataMethodList.clear();
|
|
|
}
|
|
|
|
|
|
|
|
|
- public abstract void onDataResult(DataResult result);
|
|
|
-
|
|
|
+ public void onDataResult(DataResult result) {
|
|
|
+ for (Method method : mDataMethodList) {
|
|
|
+ try {
|
|
|
+ method.invoke(this, result.getCode(), result.getMessage(), result.getBean());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|