文章标题

来源:互联网 发布:如何使用淘宝客返利 编辑:程序博客网 时间:2024/06/04 19:20

android的mvp详解
model层:
model的一个接口
IHomeModel.java

public interface IHomeModel {void loadAdsData(Subscriber<HomeOneItemEntity> subscriber);void loadAdsDataTwo(Subscriber<HomeTwoItemEntity> subscriber);void loadAdsDataThree(Subscriber<HomeThreeItemEntity> subscriber);void loadAdsDataFour(Subscriber<HomeFourItemEntity> subscriber);void loadAdsDataFive(Subscriber<HomeFiveItemEntity> subscriber);}

homeModelImpl.java

public class HomeModelImpl implements IHomeModel {    @Override    public void loadAdsData(Subscriber<HomeOneItemEntity> subscriber)    {        // 调用服务返回Observable        Observable<HomeOneItemEntity> app_banner = ApiServiceManager.getInstance()                .getHotelService()                .homeOneItem("app_banner");        app_banner.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.newThread())                .unsubscribeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }    @Override    public void loadAdsDataTwo(Subscriber<HomeTwoItemEntity> subscriber) {        Observable<HomeTwoItemEntity> app_banner = ApiServiceManager.getInstance()                .getHotelService()                .homeTwoItem();        app_banner.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.newThread())                .unsubscribeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }    @Override    public void loadAdsDataThree(Subscriber<HomeThreeItemEntity> subscriber) {        Observable<HomeThreeItemEntity> app_banner = ApiServiceManager.getInstance()                .getHotelService()                .homeThreeItem("app_under_top");        app_banner.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.newThread())                .unsubscribeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }    @Override    public void loadAdsDataFour(Subscriber<HomeFourItemEntity> subscriber) {        Observable<HomeFourItemEntity> app_banner = ApiServiceManager.getInstance()                .getHotelService()                .homeFourItem(10,1);        app_banner.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.newThread())                .unsubscribeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }    @Override    public void loadAdsDataFive(Subscriber<HomeFiveItemEntity> subscriber) {        Observable<HomeFiveItemEntity> app_banner = ApiServiceManager.getInstance()                .getHotelService()                .homeFiveItem();        app_banner.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.newThread())                .unsubscribeOn(AndroidSchedulers.mainThread())                .subscribe(subscriber);    }}

Presenter层
Presenter的基类
BasePresenter.java

public abstract class BasePresenter<IV extends BaseView>{    Reference<IV> mViewRef;//View接口类型的弱引用    CompositeSubscription mCompositeSubscription;    @UiThread    public void attachView(IV v)    {        mViewRef = new WeakReference<>(v);    }    public IV getView()    {        return mViewRef.get();    }    public boolean isAttchView()    {        return mViewRef != null && mViewRef.get() != null;    }    @UiThread    public void detachView()    {        onUnsubscribe();        if (mViewRef != null)        {            mViewRef.clear();            mViewRef = null;        }    }    public static class MvpViewNotAttachedException extends RuntimeException    {        public MvpViewNotAttachedException()        {            super("Please call Presenter.attachView(MvpView) before" +                    " requesting data to the Presenter");        }    }    //RXjava取消注册,以避免内存泄露    public void onUnsubscribe()    {        if (mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions())        {            mCompositeSubscription.unsubscribe();        }    }    //RXjava注册    public void addSubscription(Subscription subscriber)    {        if (mCompositeSubscription == null)        {            mCompositeSubscription = new CompositeSubscription();        }        mCompositeSubscription.add(subscriber);    }}

HomePresenter.java

public class HomePresenter extends BasePresenter<IHomeView> {    private IHomeModel model;    public HomePresenter()    {        model = new HomeModelImpl();    }    /**     * 加载广告数据     */    public void loadAdsData()    {        model.loadAdsData(new BaseSubscriber<HomeOneItemEntity>()        {            //请求数据失败            @Override            public void onError(ExceptionHandle.ResponeThrowable e)            {                getView().onFail(e);            }            //请求数据成功            @Override            public void onSuccess(HomeOneItemEntity result)            {                getView().onSuccess(result);            }            //请求数据完成            @Override            public void onFinish()            {                getView().onFinish();            }        });    }    /**     * 第二个item     */    public void loadAdsDataTwo()    {        model.loadAdsDataTwo(new BaseSubscriber<HomeTwoItemEntity>()        {            //请求数据失败            @Override            public void onError(ExceptionHandle.ResponeThrowable e)            {                getView().onFail(e);            }            //请求数据成功            @Override            public void onSuccess(HomeTwoItemEntity result)            {                getView().onSuccess(result);            }            //请求数据完成            @Override            public void onFinish()            {                getView().onFinish();            }        });    }    /**     * 第三个item     */    public void loadAdsDataThree()    {        model.loadAdsDataThree(new BaseSubscriber<HomeThreeItemEntity>()        {            //请求数据失败            @Override            public void onError(ExceptionHandle.ResponeThrowable e)            {                getView().onFail(e);            }            //请求数据成功            @Override            public void onSuccess(HomeThreeItemEntity result)            {                getView().onSuccess(result);            }            //请求数据完成            @Override            public void onFinish()            {                getView().onFinish();            }        });    }    /**     * 第四个item     */    public void loadAdsDataFour()    {        model.loadAdsDataFour(new BaseSubscriber<HomeFourItemEntity>()        {            //请求数据失败            @Override            public void onError(ExceptionHandle.ResponeThrowable e)            {                getView().onFail(e);            }            //请求数据成功            @Override            public void onSuccess(HomeFourItemEntity result)            {                getView().onSuccess(result);            }            //请求数据完成            @Override            public void onFinish()            {                getView().onFinish();            }        });    }    /**     * 第五个item     */    public void loadAdsDataFive()    {        model.loadAdsDataFive(new BaseSubscriber<HomeFiveItemEntity>()        {            //请求数据失败            @Override            public void onError(ExceptionHandle.ResponeThrowable e)            {                getView().onFail(e);            }            //请求数据成功            @Override            public void onSuccess(HomeFiveItemEntity result)            {                getView().onSuccess(result);            }            //请求数据完成            @Override            public void onFinish()            {                getView().onFinish();            }        });    }}

View层
fragment的基类
MvpLazyFragment.java

public abstract class MvpLazyFragment<IV extends BaseView, P extends BasePresenter<IV>>        extends BaseLazyFragment implements BaseView{    public P mPresenter;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)    {        if (mPresenter == null)        {            mPresenter = createPresenter();            mPresenter.attachView((IV) this);        }        return super.onCreateView(inflater, container, savedInstanceState);    }    @Override    public void onDestroyView()    {        super.onDestroyView();        if (mPresenter != null)        {            mPresenter.detachView();        }    }    @Override    @NonNull    public abstract P createPresenter();}

fragment的一个实现
HomeFragment.java

public class HomeFragment extends MvpLazyFragment<IHomeView, HomePresenter> implements IHomeView {    @BindView(R.id.homeXRecyclerView)    XRecyclerView homeXRecyclerView;    private HomeAdaper homeAdaper;    @NonNull    @Override    public HomePresenter createPresenter() {        return new HomePresenter();    }    @Override    public void initView() {        mPresenter.loadAdsData();        mPresenter.loadAdsDataTwo();        mPresenter.loadAdsDataThree();        mPresenter.loadAdsDataFour();        mPresenter.loadAdsDataFive();        homeAdaper = new HomeAdaper(getContext());        homeXRecyclerView.setAdapter(homeAdaper);        homeXRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));        homeXRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                mPresenter.loadAdsData();                mPresenter.loadAdsDataTwo();                mPresenter.loadAdsDataThree();                mPresenter.loadAdsDataFour();                mPresenter.loadAdsDataFive();            }            @Override            public void onLoadMore() {            }        });    }    @Override    public void initData() {    }    @Override    public int getLayoutId() {        return R.layout.fragment_home;    }    @Override    public void onFail(ExceptionHandle.ResponeThrowable e) {        Log.e("a", "请求网络失败");    }    @Override    public void onFinish() {        Log.e("a", "请求网络结束");    }    @Override    public void onSuccess(HomeOneItemEntity entity) {        Log.e("a", "HomeOneItemEntity请求网络成功");        homeAdaper.setOneItem(entity.getData().getList());    }    @Override    public void onSuccess(HomeTwoItemEntity entity) {        Log.e("a", "HomeTwoItemEntity请求网络成功");        homeAdaper.setTwoItem(entity.getData().getIcons());    }    @Override    public void onSuccess(HomeThreeItemEntity entity) {        Log.e("a", "HomeThreeItemEntity请求网络成功");        homeAdaper.setThreeItem(entity.getData().getList());    }    @Override    public void onSuccess(HomeFourItemEntity entity) {        Log.e("a", "HomeFourItemEntity请求网络成功");        homeAdaper.setFourItem(entity.getData().getTopics());        homeXRecyclerView.refreshComplete();    }    @Override    public void onSuccess(HomeFiveItemEntity entity) {        homeAdaper.setFiveItem(entity.getData());    }    @OnClick(R.id.homeSeek)    public void onClick() {        startActivity(new Intent(getActivity(), SeekActivity.class));    }}
0 0
原创粉丝点击