Mvp的完善与优化


此mvp框架相对来说是比较靠谱的



之前更新的mvp框架是非常简单的一种,非常适合初学者使用

但是不适合后期开发,无用功太多,所以说适合刚接触的了解mvp


==========================================================


其中的分包,接口回调,等等就不一一细说了

请求的 数据暂时就由假数据代替。



首先创建两个接口,IMainView、IMvpView

IMvpView是用来整个串联起来的用途,所以这个接口中不用有其他操作,只是有这个接口就行了


public interface IMainView extends IMvpView {
    void onsuccess(String str);
    void onerror(int errCode,String errMsg);
}


因为只是展示mvp所以请求时数据中用假数据


public class OkHttpUtils {

    public OkHttpUtils(){

    }

    public String getData1(){
        return "哈哈哈哈";
    }
    public String getData2(){
        return "嘿嘿嘿嘿";
    }

}



之后是MainPresenter,继承BasePresenter


public class MainPresenter extends BasePresenter<IMainView> {

    private OkHttpUtils okHttpUtils;

    public MainPresenter(){
        okHttpUtils = new OkHttpUtils();
    }

    /**
     * 提供数据的方法
     */
    
    public void loadDataFrom(){
        String str = okHttpUtils.getData1();
        getView().onsuccess(str);
    }

}


被继承的BasePresenter


public class BasePresenter<P extends IMvpView> {

    private P mIMvpView;
    public void attachView(P iMvpView){
        this.mIMvpView = iMvpView;
    }

    public void detachView(){
        mIMvpView =null;
    }

    public P getView(){
        return mIMvpView;
    }

}


BaseActivity,从MainActivity中抽取的基类


public abstract class BaseActivity<V extends BasePresenter> extends AppCompatActivity implements IMvpView {

    private V basePresenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initView();
        basePresenter = initPresnter();
        basePresenter.attachView(this);
        initData();

    }

    protected V getPresenter(){
        return basePresenter;
    }

    abstract void initView();
    abstract  void initData();
    abstract V initPresnter();
}





MainActivity中


public class MainActivity extends BaseActivity<MainPresenter> implements IMainView {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    void initView() {

    }

    @Override
    void initData() {
        MainPresenter presenter = getPresenter();
        presenter.loadDataFrom();

    }

    @Override
    MainPresenter initPresnter() {
        return new MainPresenter();
    }

    @Override
    public void onsuccess(String str) {
        Log.e("TAG",str+"....");
    }

    @Override
    public void onerror(int errCode, String errMsg) {

    }
}



运行之后没有什么效果,只是打印了一下日志,来证明此mvp是可以使用的






猜你喜欢

转载自blog.csdn.net/melect/article/details/80029130
MVP