1.生成MVPArms 和Activity
2.在清单文件中添加一下代码
<activity android:name=".mvp.ui.activity.LoginActivityActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
3.在Api中传入跟接口
public interface Api {
String APP_DOMAIN = "http://mobile.bwstudent.com/";
}
4.在Service文件夹中创建ServiceApi子接口
public interface ServiceApi {
//必须写
@FormUrlEncoded //必须写
@POST("small/user/v1/login")
Observable<ResponseBody> requestLoginInfo(@Field("phone") String userName,@Field("pwd") String pwd);
@GET("small/commodity/v1/commodityList")
Observable<ResponseBody> requestGoodsInfo();
@FormUrlEncoded //必须写
@POST("small/user/v1/register")
Observable<RequestBody> requestRegistInfo(@Field("phone") String userName,@Field("pwd") String pwd);
}
5.在contract的接口中添加方法
public interface LoginActivityContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void showData(String string);
void showGoodsData(String string);
void showRegistData(String s);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
io.reactivex.Observable<ResponseBody> requestLoginInfo(String userName, String pwd);
Observable<ResponseBody> requestGoodsInfo();
io.reactivex.Observable<RequestBody> requestRegistInfo(String userName, String pwd);
}
}
6.在Activity中继承V层接口
@Override
public void showData(String string) {
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
}
@Override
public void showGoodsData(String string) {
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
}
@Override
public void showRegistData(String s) {
Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
}
@OnClick({R.id.btn_login, R.id.btn_requestHomePageData})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_login:
String userName = etUserName.getText().toString();
String pwd = etPassword.getText().toString();
mPresenter.requestLoginData(userName, pwd);
break;
case R.id.btn_requestHomePageData:
mPresenter.requestGoodsData();
break;
}
}
@OnClick(R.id.btn_regist)
public void onViewClicked() {
String userName = etUserName.getText().toString();
String pwd = etPassword.getText().toString();
mPresenter.requestRegistData(userName,pwd);
}
}
7.P层创建方法 向M层传数去 向V层回传数据
public void requestLoginData(String userName, String pwd){
Observable<ResponseBody> observable = mModel.requestLoginInfo(userName, pwd);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
mRootView.showData(responseBody.string());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
String errorMessage = throwable.getMessage().toString();
mRootView.showData(errorMessage);
}
});
}
public void requestGoodsData(){
Observable<ResponseBody> observable = mModel.requestGoodsInfo();
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
mRootView.showGoodsData(responseBody.string());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
mRootView.showGoodsData(throwable.getMessage().toString());
}
});
}
public void requestRegistData(String userName, String pwd){
Observable<RequestBody> observable = mModel.requestRegistInfo(userName,pwd);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<RequestBody>() {
@Override
public void accept(RequestBody requestBody) throws Exception {
mRootView.showRegistData(requestBody.toString());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
mRootView.showRegistData(throwable.getMessage().toString());
}
});
}
8.在M层处理
@Override
public io.reactivex.Observable<ResponseBody> requestLoginInfo(String userName, String pwd) {
//return mRepositoryManager.obtainRetrofitService(ServiceApi.class).requestLoginInfo(userName, pwd);
return mRepositoryManager.obtainRetrofitService(ServiceApi.class).requestLoginInfo(userName,pwd);
}
@Override
public Observable<ResponseBody> requestGoodsInfo() {
return mRepositoryManager.obtainRetrofitService(ServiceApi.class).requestGoodsInfo();
}
@Override
public Observable<RequestBody> requestRegistInfo(String userName, String pwd) {
return mRepositoryManager.obtainRetrofitService(ServiceApi.class).requestRegistInfo(userName, pwd);
}
}