瀏覽代碼

Optional代替动态代理

詹子聪 5 年之前
父節點
當前提交
90289d5d30

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

@@ -10,7 +10,7 @@ import com.miekir.mvp.view.BaseMvpActivity;
 import com.miekir.newmvp.R;
 import com.miekir.newmvp.main.ui.home.article.presenter.ArticlePresenter;
 
-public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IHomeView {
+public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IArticleView {
 
     @InjectPresenter
     ArticlePresenter mUserPresenter;
@@ -42,7 +42,7 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
     }
 
     @Override
-    public void onMainResult() {
+    public void onArticleResult(String result) {
         Log.d(getClass().getName(), "main obj is " + this.toString());
     }
 }

+ 2 - 2
app/src/main/java/com/miekir/newmvp/main/ui/home/IHomeView.java

@@ -9,6 +9,6 @@ import com.miekir.mvp.view.IView;
  * @date 2020/10/15 10:47
  * Description:
  */
-public interface IHomeView extends IView {
-    void onMainResult();
+public interface IArticleView extends IView {
+    void onArticleResult(String result);
 }

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

@@ -6,7 +6,7 @@ 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.IHomeView;
+import com.miekir.newmvp.main.ui.home.IArticleView;
 
 import io.reactivex.Observable;
 import io.reactivex.ObservableOnSubscribe;
@@ -21,7 +21,7 @@ import io.reactivex.schedulers.Schedulers;
  * @date 2020/11/18 14:27
  * Description:
  */
-public class ArticlePresenter extends BasePresenter<IHomeView> {
+public class ArticlePresenter extends BasePresenter<IArticleView> {
     private IArticleModel mModel;
 
     @Override
@@ -53,7 +53,7 @@ public class ArticlePresenter extends BasePresenter<IHomeView> {
     public void fetchUserData() {
         mModel.getData(bean -> {
             // 执行完毕,回调
-            getCallbackView().onMainResult();
+            post(view -> view.onArticleResult(bean.content));
         });
     }
 
@@ -74,7 +74,7 @@ public class ArticlePresenter extends BasePresenter<IHomeView> {
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(next -> {
             LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
-            getCallbackView().onMainResult();
+            post(view -> view.onArticleResult("result"));
         }, error -> {
             LogTool.d(getClass().getName(), error.getMessage());
         });

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

@@ -10,6 +10,8 @@ import com.miekir.mvp.view.ViewHandler;
 
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Proxy;
+import java.util.Optional;
+import java.util.function.Consumer;
 
 import io.reactivex.disposables.CompositeDisposable;
 
@@ -31,12 +33,11 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     public BasePresenter() {}
 
     /**
-     * View的代理,防止空指针判断
+     * 安全地执行方法
+     * @param consumer 要执行的操作
      */
-    private ViewHandler mViewHandler;
-    public V getCallbackView() {
-        mViewHandler.setView(getView());
-        return (V) mViewHandler.getProxyObject();
+    public void post(Consumer<? super V> consumer) {
+        Optional.ofNullable(getView()).ifPresent(consumer);
     }
 
     private V getView() {
@@ -44,7 +45,6 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
     }
 
     public void attachView(V view) {
-        mViewHandler = new ViewHandler(view.getClass());
         mViewReference = new WeakReference<V>(view);
     }