首先是依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.10'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
各个接口
public interface IUser {
void showUser(UserNameBean userNameBean);
String uid();
}
public interface IModel {
void getDataLogin(Map<String, String> map);
void getUser(String uid);
}
public interface MyService {
@GET("user/login")
Observable<LoginBean> getlogin(@QueryMap Map<String, String> map);
@GET("user/getUserInfo")
Observable<UserNameBean> getuser(@Query("uid") String uid);
}
public interface IPresenter {
void showLoginToView(IModel iModel, IMainView iMainView);
void showUserToview(IModel iModel, IUser iUser);
void getDataModel(LoginBean loginBean);
void getDataUser(UserNameBean userNameBean);
void getError(String error);
}
Model层的具体实现
/**
* model的具体实现
*/
public class ModelFusion implements IModel {
private IPresenter iPresenter;
public ModelFusion(IPresenter iPresenter) {
this.iPresenter = iPresenter;
}
@Override
public void getDataLogin(Map<String, String> map) {
RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
MyService myService = retrofitUtil.createRequest(MyService.class);
Observable<LoginBean> observable = myService.getlogin(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<LoginBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(LoginBean loginBean) {
iPresenter.getDataModel(loginBean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
@Override
public void getUser(String uid) {
RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
MyService myService = retrofitUtil.createRequest(MyService.class);
Observable<UserNameBean> observable = myService.getuser(uid);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserNameBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(UserNameBean userNameBean) {
iPresenter.getDataUser(userNameBean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
P层的具体实现
/**
* Presenter的操作类
*/
public class PresenterFusion implements IPresenter {
private IMainView iMainView;
private IUser iUser;
@Override
public void showLoginToView(IModel iModel, IMainView iMainView) {
this.iMainView = iMainView;
Map<String,String> map = new HashMap<>();
map.put("mobile",iMainView.mobile());
map.put("password",iMainView.pass());
iModel.getDataLogin(map);
}
@Override
public void showUserToview(IModel iModel, IUser iUser) {
this.iUser = iUser;
iModel.getUser(iUser.uid());
}
@Override
public void getDataModel(LoginBean loginBean) {
iMainView.showLoginSuccess(loginBean);
}
@Override
public void getDataUser(UserNameBean userNameBean) {
iUser.showUser(userNameBean);
}
@Override
public void getError(String error) {
iMainView.showLoginError(error);
}
}
V层具体实现
public class LoginActivity extends AppCompatActivity implements IMainView,IUser {
@BindView(R.id.ed_mobile)
EditText edMobile;
@BindView(R.id.ed_pass)
EditText edPass;
@BindView(R.id.lo_register)
TextView loRegister;
@BindView(R.id.qq_login)
ImageView qqLogin;
private LoginBean loginBeanp;
private PresenterFusion presenterFusion;
private String suid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
}
public void cha(View view) {
finish();
}
public void login(View view) {
presenterFusion = new PresenterFusion();
presenterFusion.showLoginToView(new ModelFusion(presenterFusion),this);
}
public void userinfo(){
suid = String.valueOf(loginBeanp.getData().getUid());
presenterFusion.showUserToview(new ModelFusion(presenterFusion),this);
}
@Override
public void showLoginSuccess(LoginBean loginBean) {
this.loginBeanp = loginBean;
if (loginBean.getCode().equals("0")){
Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
userinfo();
finish();
}else {
Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void showLoginError(String error) {
}
@Override
public String mobile() {
return edMobile.getText().toString();
}
@Override
public String pass() {
return edPass.getText().toString();
}
@Override
public void showUser(UserNameBean userNameBean) {
EventBus.getDefault().post(new MessageEvent(userNameBean.getData().getUsername()));
}
@Override
public String uid() {
return suid;
}
}