base基类
public interface BaseView {
void showLoading();
void hideLoading();
void loginExpired();
}
public class BasePresenter<V extends BaseView, M extends BaseMode> {
protected V mView;
protected M mModel;
protected Context mContext;
public BasePresenter(Context mContext, V mView, M mModel) {
this.mView = mView;
this.mModel = mModel;
this.mContext = mContext;
}
public void onDestroy() {
if (mModel != null) {
mModel.onDestroy();
}
}
}
public abstract class BaseMode {
public CompositeDisposable mDisposable = new CompositeDisposable();
/**
* 初始化调用网络请求
* @return
*/
public mvp apiService() {
return MvpApi.createApi().create(mvp.class);
}
/**
* 取消网络请求
*/
public void onDestroy() {
if (mDisposable != null) {
mDisposable.dispose();
mDisposable.clear();
}
}
}
public abstract class BaseActivity<T extends BasePresenter> extends RxAppCompatActivity {
public Context mContext;
public T mPresenter;
private Unbinder mBind;
public Bundle mSavedInstanceState;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSavedInstanceState = savedInstanceState;
mContext = this;
if (setViewId() != 0) {
setContentView(setViewId());
} else {
throw new RuntimeException("layoutRes==-1");
}
createPresenter();
mBind = ButterKnife.bind(this);
EventBus.getDefault().register(this);
initView();
}
EventBean 消息通知bean
public class EventBean {
private int code;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public Object getJob() {
return job;
}
public void setJob(Object job) {
this.job = job;
}
private Object job;
}
登录示例 使用
@FormUrlEncoded
@POST("/xxxxxx")
Observable<BaseBean> login(@Field("telephone") String telephone,@Field("password") String password);
public interface ILogin {
interface IPLogin {
void Login(String teltphone,String password);
}
interface IVLogin extends BaseView {
void LoginSuccess(LoginBean bean);
void LoginError(String reason);
void refreshButton();
}
}
public class LoginMode extends BaseMode {
public void Login(String teltphone,String password,RxObservable rxObservable) {
apiService()
.login(teltphone,password)
.compose(RxTransformerUtils.switchSchedulers(this))
.subscribe(rxObservable);
}
}
public class LoginPresenter extends BasePresenter<ILogin.IVLogin, LoginMode> implements ILogin.IPLogin {
public LoginPresenter(Context mContext, ILogin.IVLogin mView) {
super(mContext, mView, new LoginMode());
}
@Override
public void Login(String teltphone, String password) {
//网络请求前加载loading
mView.showLoading();
mModel.Login(teltphone, password, new RxObservable() {
@Override
public void onSuccess(Object o) {
//请求返回关闭loading
mView.hideLoading();
mView.LoginSuccess((LoginBean) o);
}
@Override
public void onFail(String reason) {
//请求返回关闭loading
mView.hideLoading();
mView.LoginError(reason);
}
@Override
public void onExpired() {
//网络错误关闭loading
mView.hideLoading();
mView.loginExpired();
}
});
}
//监听输入
public void textListener(final TextView view) {
view.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
mView.refreshButton();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
public class LoginActivity extends BaseActivity<LoginPresenter> implements ILogin.IVLogin {
@BindView(R.id.et_telephone)
AppCompatEditText etTelephone;
@BindView(R.id.et_password)
AppCompatEditText etPassword;
@BindView(R.id.btn_next)
Button btnNext;
@Override
public void initView() {
//监听输入
mPresenter.textListener(etTelephone);
mPresenter.textListener(etPassword);
}
@Override
public int setViewId() {
return R.layout.activity_login;
}
@Override
public void createPresenter() {
mPresenter = new LoginPresenter(this, this);
}
@Override
public void LoginSuccess(LoginBean bean) {
//登录成功
}
@Override
public void LoginError(String reason) {
//登录失败
showToast(reason);
}
@Override
public void refreshButton() {
//判断按钮是否可以点击
}
@Override
public void showLoading() {
//加载loading
}
@Override
public void hideLoading() {
//关闭loading
}
@Override
public void loginExpired() {
//登录失效处理
}
@OnClick(R.id.btn_next)
public void onViewClicked() {
//判断符合条件请求登录
if (!StringUtils.IsStringNull(etTelephone.getText().toString()) && !StringUtils.IsStringNull(etPassword.getText().toString())) {
mPresenter.Login(etTelephone.getText().toString(), etPassword.getText().toString());
}
}
//可以重写接受eventbus通知的方法.
@Override
protected void acceptMessage(int code, Object object) {
super.acceptMessage(code, object);
}
}
完整demo https://github.com/cheerrich/retrofit2-rxjava-2-android-mvp-.git