android mvp 框架 (简单易懂,轻松上手)

本文详细介绍了如何在Android开发中使用Retrofit2和RxJava结合MVP模式进行网络请求处理。通过定义BaseContract, Bean类和Presenter,实现了数据加载、错误处理和视图更新的解耦。

基于Retrofit2

先把base编写

public interface BaseContract {

    interface BasePresenter<T> {

        void attachView(T view);

        void detachView();
    }

    interface BaseView {

        void showError();

        void complete();
    }
}
public class RxPresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {

    protected T mView;
    protected CompositeDisposable mDisposable;

    protected void unSubscribe() {
        if (mDisposable != null) {
            mDisposable.dispose();
        }
    }

    protected void addDisposable(Disposable subscription) {
        if (mDisposable == null) {
            mDisposable = new CompositeDisposable();
        }
        mDisposable.add(subscription);
    }

    @Override
    public void attachView(T view) {
        this.mView = view;
    }

    @Override
    public void detachView() {
        this.mView = null;
        unSubscribe();
    }
}

1.basebean:外部返回与实体类无关的数据,比如boolean ok,是表示返回数据正常,根据接口不同,返回的字段不同,与实体类中的数据无关

public class BaseBean {
  public boolean ok;
}

2.bean:实体类对象

public class bean{

private int id ;

public String getid() {
    return id;
}

public void set_id(String id) {
    this.id = id;
}

}

3.beanpackage

public class beanpackage extends BaseBean {
private bean mbean;
public bean getBean() {
    return mbean;
}

public void setBean (bean bean) {
    this.mbean= bean;
}
}

4.beanContract

public interface beanContract extends BaseContract{
    interface View extends BaseContract.BaseView{
    void finishRefresh(bean bean);
    }

    interface Presenter extends BaseContract.BasePresenter<View>{
       void refreshdata(String bean_id);
    }
}

5.beanPresenter

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

public class beanPresenter extends RxPresenter<beanContract.View>
        implements beanContract.Presenter {
    @Override
    public void refreshdata(String bean_id) {
             //如果需要添加非对称加密
             /*StringBuffer buffer = new StringBuffer();
buffer.append("bean_id=")
        .append(bean_id)
Log.i("加密前", buffer.toString());
String keys = Aes.encode(buffer.toString(), Aes.keyBytes);*/
        Disposable refreshDispo = RemoteRepository.getInstance()
                .getBookListDetail(bean_id) //keys
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        (beans)-> {
                            mView.finishRefresh(beans);
                            mView.complete();
                        }
                        ,
                        (e) ->{
                            mView.showError();
                            LogUtils.e(e);
                        }
                );
        addDisposable(refreshDispo);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值