MVP模式实现接口登陆
前言:请读者放心,此贴没有大量文字灌水,代码全部简单易懂,高手勿喷,谢谢!
MVP
全称 Model-View-Presenter
要说MVP那就不得不说一说它的前辈——MVC。
它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
帖子重点是MVP模式实现接口登陆,具体MVP介绍请见https://baike.baidu.com/item/MVP%E6%A8%A1%E5%BC%8F/10961746?fr=aladdin
本帖网络请求用到一个lib包,我会打包给大家。
lib包下载地址:http://download.csdn.net/download/qq_37199105/10051091
User类
public class User { private String name; private String pass; public User(String name, String pass) { this.name = name; this.pass = pass; } public User() { } public String getName() { return name; } public String getPass() { return pass; } public void setName(String name) { this.name = name; } public void setPass(String pass) { this.pass = pass; } }
UserBean类
public class UserBean { /** * msg : 登录成功 * code : 0 * data : {"age":null,"appkey":null,"appsecret":null,"createtime":"2017-10-19T00:00:00","email":null,"gender":0,"icon":null,"mobile":"18529327770","money":0,"nickname":"sss","password":"123123","token":null,"uid":903,"username":"18529327770"} */ private String msg; private String code; public UserBean() { } public void setMsg(String msg) { this.msg = msg; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public String getCode() { return code; } public UserBean(String msg, String code) { this.msg = msg; this.code = code; } }
API类
public class API { public static final String LOGIN_URL = "http://120.27.23.105/user/login"; // 拼接字段 mobile = 18529327770&123123 public static final String REG_URL = "http://120.27.23.105/user/reg"; // 拼接字段 mobile = 18529327770&123123 }
model层的类和接口
public interface IModel { // 登陆的方法 String login(User user); }
public class UserModel implements IModel{ private String code = "false"; @Override public String login(User user) { OkHttp3Utils.getInstance().doGet(API.LOGIN_URL + "?mobile=" + user.getName() + "&&password=" + user.getPass(), new GsonObjectCallback<UserBean>() { @Override public void onUi(UserBean userBean) { code = userBean.getCode(); } @Override public void onFailed(Call call, IOException e) { } }); if (code.equals("0")){ return "true"; } return "false"; } }
view层的接口
public interface Iview { // 登陆成功 void onLoginSuccess(); // 登陆失败 void onLoginFailed(String error); }
presenter层
public class UserPresenter { private final Iview iview; private final UserModel userModel; public UserPresenter(Iview iview) { this.iview = iview; userModel = new UserModel(); } public void login(User user){ String res = userModel.login(user); if (res.equals("true")){ iview.onLoginSuccess(); }else{ iview.onLoginFailed("登陆失败"); } } }
view层的实体类 Activity
public class MainActivity extends AppCompatActivity implements Iview { EditText edit_name,edit_pass; Button btn_login; UserPresenter userPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit_name = (EditText) findViewById(R.id.edit_name); edit_pass = (EditText) findViewById(R.id.edit_pass); btn_login = (Button) findViewById(R.id.btn_login); userPresenter = new UserPresenter(this); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String name = edit_name.getText().toString(); String pass = edit_pass.getText().toString(); userPresenter.login(new User(name,pass)); } }); } @Override public void onLoginSuccess() { Toast.makeText(this,"登陆成功了",Toast.LENGTH_SHORT).show(); } @Override public void onLoginFailed(String error) { Toast.makeText(this,"失败:"+error,Toast.LENGTH_SHORT).show(); } }
xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.test.mvpdemo1102.MainActivity"> <EditText android:id="@+id/edit_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit_pass" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登陆" /> </LinearLayout>
注:有人会问,请求网络接口,为什么不加权限?因为上面我所依赖的那个lib包里都配置了相关的权限和初始化。所以,导入lib包添加依赖到app即可。
相关推荐
- Windows Server2008R2 实现多用户远程登陆模式
- 浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现
- 通过小程序实现网站扫码登录!每年都可以省 300 块...代替微信开放平台和服务号的登陆模式!
- Kotlin + Google mvp 实现新的架构模式
- 利用接口实现自定义监听事件以及观察者模式
- 使用MVP请求接口 ,用 Xbanner实现 无线 轮播的 效果展示
- Android MVP模式下的登录实现
- 怎么在java接口中实现一个代理设计模式
- python调用API接口怎么实现登陆短信验证
- 如何实现在Linux中模式切换与用户登陆
- Struts2概述-1.Struts2的简介以及简单登陆案例
- java登陆