android MVP连接服务器,Android之MVP模式实现登陆和网络数据加载

MVP简介

相信你们对 MVC 都是比较熟悉了:M-Model-模型、V-View-视图、C-Controller-控制器,MVP做为MVC的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。html

Model

Model 是用户界面须要显示数据的抽象,也能够理解为从业务数据(结果)那里到用户界面的抽象。android

View

视图这一层体现的很轻薄,负责显示数据、提供友好界面跟用户交互就行。MVP下Activity和Fragment体如今了这一层,Activity通常也就作加载UI视图、设置监听再交由Presenter处理的一些工做,因此也就须要持有相应Presenter的引用。git

Presenter

Presenter这一层处理着程序各类逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理逻辑交由业务层作具体的业务操做,而后将获得的 Model 给 View 显示。github

MVC和MVP的区别网络

在 MVC 中:架构

View 能够与 Model 直接交互;

Controller 能够被多个 View 共享;

Controller 能够决定显示哪一个 View 。

在 MVP 中:ide

View 不直接与 Model 交互;

Presenter 与 View 经过接口来交互,更有利于添加单元测试;

一般 View 与 Presenter 是一对一的,但复杂的 View 可能绑定多个 Presenter 来处理;

Presenter 也能够直接进行 View 上的渲染。

模仿登陆案例:(demo中包含登陆和网络数据请求)单元测试

model

public class ModelSignIn implements ILoginSignIn {

@Override

public void onSignIn(String name, String pwd, IOnSetListenter listenter) {

if (name.isEmpty())

{

if (listenter!=null)

{

listenter.onError("输入用户名为空");

return;

}

}

if (pwd.isEmpty())

{

if (listenter!=null)

{

listenter.onError("输入密码为空");

return;

}

}

if(name.equals("dickyqie") && pwd.equals("123456"))

{

if (listenter!=null)

{

listenter.onError("登陆成功");

return;

}

}else{

if (listenter!=null)

{

listenter.onError("登陆失败");

return;

}

}

}

}

presenter

public class Presenter extends BasePresenter {

ILoginSignIn iLoginSignIn=new ModelSignIn();

public void setSignIn(String name,String pwd)

{

iLoginSignIn.onSignIn(name, pwd, new ILoginSignIn.IOnSetListenter() {

IView view=getView();

@Override

public void onError(String error) {

if(view!=null){

view.showToast(error);

}

}

@Override

public void onSccess(String repsonce) {

if(view!=null){

view.showToast(repsonce);

}

}

});

}

}

activity

public class MainActivity extends BaseActivity implements IView,View.OnClickListener{

EditText username;

EditText password;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private void initView()

{

username=(EditText)findViewById(R.id.username);

password=(EditText)findViewById(R.id.password);

findViewById(R.id.login).setOnClickListener(this);

}

@Override

public Presenter createPersenter() {

return new Presenter();

}

@Override

public void onClick(View v) {

String name=username.getText().toString();

String pwd=password.getText().toString();

p.setSignIn(name,pwd);

}

@Override

public void showToast(String msg) {

Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show();

}

}

网络请求

public class MainActivity extends BaseActivity implements IView,View.OnClickListener {

private TextView textView;

private ProgessDialog dialog;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private void initView(){

textView=(TextView) findViewById(R.id.text);

findViewById(R.id.btn).setOnClickListener(this);

}

@Override

public void onLoadContributorStart() {

showProgress();

}

@Override

public void onLoadContribtorComplete(String topContributor) {

//获得主线程的数据

Message msg=new Message();

msg.what=1;

msg.obj=topContributor;

handler.sendMessage(msg);

}

Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

dismissProgress();

textView.setText(msg.obj.toString());

}

};

@Override

public void onClick(View v) {

p.setGet();

}

@Override

public Presenter createPresenter() {

return new Presenter();

}

@Override

public void onNetWork() {

Toast.makeText(getApplicationContext(),"网络未链接",Toast.LENGTH_LONG).show();

}

@Override

public void onError() {

Toast.makeText(getApplicationContext(),"数据加载失败",Toast.LENGTH_LONG).show();

textView.setText("");

}

/***

* 启动

*/

public void showProgress()

{

if(dialog==null)

{

dialog=new ProgessDialog(MainActivity.this);

}

dialog.showMessage("正在加载");

}

/***

* 关闭

*/

public void dismissProgress()

{

if(dialog==null)

{

dialog=new ProgessDialog(this);

}

dialog.dismiss();

}

}

不要忘记在AndroidManifest.xml加权限哦!

因为代码太多,完整代码未给出,源码直接下载便可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值