MVP的简单使用

来源:互联网 发布:软件成本估算专家 编辑:程序博客网 时间:2024/06/05 05:46

MVP的简单应用

1、M-V-P的简单使用

V——视图层  自定义功能接口,Activity继承接口并实现里面的方法调用

public interface LoginView {    //书写接口,    //接口方法    public void nameEmpty();    //密码为空    public void passwordEmpth();    //登录成功    public void loginSuccess(Object object);    //登录失败    public void loginFailed(int code);}//继承接口后   更具操作   通知中间层Persenter进行相对应的数据调用和回调
public class BallActivity extends AppCompatActivity implements LoginView{    @BindView(R.id.name)    EditText name;    @BindView(R.id.paw)    EditText paw;    @BindView(R.id.but_dl)    Button login;    private LoginPresenter loginPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_ball);        ButterKnife.bind(this);        //new 一个p中间层   这个this代表loginview        loginPresenter = new LoginPresenter(this);    }    @OnClick(R.id.but_dl)    public void onClick() {        loginPresenter.login(name.getText().toString(),paw.getText().toString());    }    @Override    public void nameEmpty() {        Toast.makeText(this,"用户名不能为空!!!",Toast.LENGTH_SHORT).show();    }    @Override    public void passwordEmpth() {        Toast.makeText(this,"密码不能为空!!!",Toast.LENGTH_SHORT).show();    }    @Override    public void loginSuccess(Object object) {        runOnUiThread(new Runnable() {            @Override            public void run() {                //主线程中不能做耗时操作            Toast.makeText(BallActivity.this,"登陆成功!!!",Toast.LENGTH_SHORT).show();            }        });    }    @Override    public void loginFailed(int code) {        Toast.makeText(this,"登录失败!!!",Toast.LENGTH_SHORT).show();    }    @Override    protected void onDestroy() {        super.onDestroy();        loginPresenter.detach();    }}
2,P-中间层,作逻辑代码的操作    减轻Activity的代码量

public class LoginPresenter {    //视图层发生改变通知中间层p,然后中间层决定是否通知模型层 需要使用就new    private LoginView loginView;    private LoginModel loginModel;    public LoginPresenter(LoginView loginView) {        this.loginView = loginView;        loginModel = new LoginModel();    }    public void detach(){        this.loginView = null;    }    //因为是验证密码和账号 persenter里上书写的都是逻辑代码,编写逻辑代码        public void login(String name,String paw){            if (TextUtils.isEmpty(name)){                loginView.nameEmpty();                return;            }            if (TextUtils.isEmpty(paw)){                loginView.passwordEmpth();                return;            }            loginModel.login(name, paw, new ModelCallBack() {                @Override                public void success(String data) {                    loginView.loginSuccess(data);                }                @Override                public void failed(int code) {                    loginView.loginFailed(code);                }            });        }}3。M-模型层,工具类的存放和使用
public class LoginModel {    //模型层    放工具等代码    public void login(String name, String paw, final ModelCallBack callBack){        OkHttpClient okHttpClient = new OkHttpClient();        RequestBody body = new FormBody.Builder()                .add("pscid","39")                .add("page","1")                .build();        Request request = new Request.Builder().url("http://120.27.23.105/product/getProducts")                .post(body)                .build();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                callBack.failed(1);            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //接口回调                callBack.success(result);            }        });    }}
4,接口的创建,接口回调时返回数据
public interface ModelCallBack {    public void success(String data);    public void failed(int code);}
5,在布局文件中加载布局
<EditText    android:id="@+id/name"    android:layout_width="match_parent"    android:layout_height="wrap_content" /><EditText    android:id="@+id/paw"    android:layout_width="match_parent"    android:layout_height="wrap_content" /><Button    android:id="@+id/but_dl"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="login"/>