android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(2)--之MVP引入
2017-08-10 00:26
645 查看
上一篇文章中,我们已经成功的引入了Dagger2;今天我们将继续使用android MVP模式对代码进行实现。
BaseAcitvity.java
MainView.java
HasComponent.java
MainPresenter .java
RxMvpPresenter.java
BaseMvpPresenter.java
MvpPresenter.java
BaseAcitvity.java
MvpView.java
**下一篇我们将讲解如何引入Retrofit RxJava**
项目下载地址
#1 将MainActivity.java文件移动到ui包下,并在ui包下建立view包; view包下存放接口。包及类结构如图
2 新建presenter包,并在presenter下建立相关的类, 如图
说明:图中RxMapPresenter为Presenter的基类, 该类继承BaseMapPresenter类; BaseMapPresenter提供子类实例化Presenter与View之间的接口对象的方法。RxMapPresenter 负责实例化CompositeSubscription对象, 子类使用该对象进行网络请求。
MainActivity.java代码如下public class MainActivity extends BaseAcitvity implements MainView, HasComponent<MainComponent> { @BindView(R.id.test) TextView test; @Inject MainPresenter mainPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); getComponent().inject(this); //重要 mainPresenter.attachView(this); } @OnClick(R.id.test) public void onClick() { mainPresenter.login("", ""); } @Override public void loginSuccess(String userInfo) { Toast.makeText(this, userInfo, Toast.LENGTH_LONG).show(); } @Override public void loginFail() { } @Override public void loginException() { } @Override public MainComponent getComponent() { return DaggerMainComponent.builder() .applicationComponent(Application.get(this).getComponent()) .activityModule(new ActivityModule(this)) .mainModule(new MainModule()) .build(); } @Override protected void onDestroy() { super.onDestroy(); mainPresenter.detachView(); } }
BaseAcitvity.java
public class BaseAcitvity extends Activity { private ActivityComponent mActivityComponent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public ActivityComponent getActivityComponent() { if (mActivityComponent == null) { mActivityComponent = DaggerActivityComponent.builder() .activityModule(new ActivityModule(this)) .applicationComponent(Application.get(this).getComponent()) .build(); } return mActivityComponent; } }
MainView.java
public interface MainView extends MvpView{ void loginSuccess(String userInfo); void loginFail(); void loginException(); }
HasComponent.java
public interface HasComponent<C> { C getComponent(); }
MainPresenter .java
public class MainPresenter extends RxMvpPresenter<MainView> { @Inject public MainPresenter() { } @Inject Application context; public void login(String username, String password) { getMvpView().loginSuccess("MVP成功搭建"); } }
RxMvpPresenter.java
public class RxMvpPresenter<V extends MvpView> extends BaseMvpPresenter<V> { protected CompositeSubscription mCompositeSubscription; @Override public void attachView(V mvpView) { super.attachView(mvpView); mCompositeSubscription = new CompositeSubscription(); } @Override public void detachView() { super.detachView(); mCompositeSubscription.clear(); mCompositeSubscription = null; } }
BaseMvpPresenter.java
public class BaseMvpPresenter<V> implements MvpPresenter<V> { private V mMvpView; @Override public void attachView(V mvpView) { mMvpView = mvpView; } @Override public void detachView() { mMvpView = null; } public boolean isViewAttached() { return mMvpView != null; } public V getMvpView() { return mMvpView; } public void checkViewAttached() { if (!isViewAttached()) throw new MvpViewNotAttachedException(); } public static class MvpViewNotAttachedException extends RuntimeException { public MvpViewNotAttachedException() { super("Please call Presenter.attachView(MvpView) before" + " requesting data to the Presenter"); } } }
MvpPresenter.java
public interface MvpPresenter<V> { @UiThread void attachView(V view); @UiThread void detachView(); }
BaseAcitvity.java
public class BaseAcitvity extends Activity { private ActivityComponent mActivityComponent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public ActivityComponent getActivityComponent() { if (mActivityComponent == null) { mActivityComponent = DaggerActivityComponent.builder() .activityModule(new ActivityModule(this)) .applicationComponent(Application.get(this).getComponent()) .build(); } return mActivityComponent; } }
MvpView.java
public interface MvpView { }
3. 运行项目, 点击屏幕上的HelloWold!文字, 如果出现 “MVP搭建成功”的文字说明android MVP环境搭建成功。
**下一篇我们将讲解如何引入Retrofit RxJava**
项目下载地址
相关文章推荐
- android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(1)--之Dagger2引入
- android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础项目框架搭建(3)--完美实现
- 搭建自己的框架之3:项目中引入Dagger2&Dagger.android
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Arms是一个整合了大量主流开源项目的Android Mvp快速搭建框架
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Android基础之 用Eclipse搭建Android开发环境和创建第一个Android项目
- S2SH开发环境搭建、框架整合、项目基础环境搭建
- 1、Android项目框架搭建 (分析需求、整理资料)
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- Android QQ空间(Apad)项目总结(三)---应用UI框架的搭建!!!
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- android 项目框架搭建
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- Android实战开发---基础框架搭建
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)