View包中
package view; /** * Created by lenovo on 2017/11/1. */ public interface IUserView { /** * 登录成功 */ void onLoginSuccess(); /** * 登录失败 * * @param error */ void onLoginFailed(String error); }
model包中(两个类,IUserMode ,UserMode)
package model; import bean.User; /** * Created by lenovo on 2017/11/1. */ public interface IUserMode { /** * 登录 * * @param user * @return 约定返回"true"为登录成功,其他为登录失败的错误信息 */ String login(User user); }
package model; import java.io.IOException; import java.util.HashMap; import bean.API; import bean.User; import bean.UserBean; import okhttp3.Call; import utils.GsonObjectCallback; import utils.OkHttp3Utils; import view.IUserView; /** * Created by lenovo on 2017/11/1. */ public class UserMode implements IUserMode{ private String code; @Override public String login(User user) { HashMap<String,String> map=new HashMap<>(); map.put("mobile",user.getUsername()); map.put("password",user.getPassword()); OkHttp3Utils.getInstance().doPost(API.LOGIN, map, new GsonObjectCallback<UserBean>() { @Override public void onUi(UserBean userBean) { code = userBean.getCode(); } @Override public void onFailed(Call call, IOException e) { } }); /* boolean networkError = false; //网络是否异常 try { Thread.sleep(3000);//模拟网络连接 if (networkError) { return "网络异常"; } else if ("ethanco".equals(user.getUsername()) && "123456".equals(user.getPassword())) { return "true"; } else { return "账号或密码错误"; } } catch (InterruptedException e) { e.printStackTrace(); return e.getMessage(); }*/ return code; } }
presenter包中
package presenter; import android.os.Handler; import android.os.Looper; import bean.User; import model.UserMode; import view.IUserView; /** * Created by lenovo on 2017/11/1. */ public class UserPresenter { private final IUserView userView; private final UserMode userMode; public UserPresenter(IUserView userView) { this.userView = userView; this.userMode = new UserMode(); } /** * 登录 * * @param user */ public void login(final User user) { /* new Thread() { @Override public void run() { final String res = userMode.login(user); new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { if ("true".equals(res)) { userView.onLoginSuccess(); } else { userView.onLoginFailed(res); } } }); } }.start();*/ final String res = userMode.login(user); if ("0".equals(res)) { userView.onLoginSuccess(); } else { userView.onLoginFailed(res); } } }
bean包中
package bean; /** * Created by lenovo on 2017/11/1. */ public class User {(自己写) public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String username; private String password; }package bean; /** * Created by lenovo on 2017/11/1. */ public class UserBean {(网络请求) /** * msg : 登录成功 * code : 0 * data : {"age":null,"appkey":null,"appsecret":null,"createtime":"2017-10-19T21:09:31","email":null,"gender":0,"icon":null,"mobile":"18401213718","money":0,"nickname":null,"password":"123456","token":null,"uid":1000,"username":"18401213718"} */ private String msg; private String code; private DataBean data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public static class DataBean { /** * age : null * appkey : null * appsecret : null * createtime : 2017-10-19T21:09:31 * email : null * gender : 0 * icon : null * mobile : 18401213718 * money : 0 * nickname : null * password : 123456 * token : null * uid : 1000 * username : 18401213718 */ private Object age; private Object appkey; private Object appsecret; private String createtime; private Object email; private int gender; private Object icon; private String mobile; private int money; private Object nickname; private String password; private Object token; private int uid; private String username; public Object getAge() { return age; } public void setAge(Object age) { this.age = age; } public Object getAppkey() { return appkey; } public void setAppkey(Object appkey) { this.appkey = appkey; } public Object getAppsecret() { return appsecret; } public void setAppsecret(Object appsecret) { this.appsecret = appsecret; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public Object getEmail() { return email; } public void setEmail(Object email) { this.email = email; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public Object getIcon() { return icon; } public void setIcon(Object icon) { this.icon = icon; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } public Object getNickname() { return nickname; } public void setNickname(Object nickname) { this.nickname = nickname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Object getToken() { return token; } public void setToken(Object token) { this.token = token; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } }
MainActivity中
package com.bwie.mvp; import android.app.ProgressDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import bean.User; import presenter.UserPresenter; import view.IUserView; public class MainActivity extends AppCompatActivity implements IUserView,View.OnClickListener{ private EditText username,password; private Button button; private UserPresenter userPresenter; private ProgressDialog loginProgreess; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); username= (EditText) findViewById(R.id.username); password= (EditText) findViewById(R.id.password); button= (Button) findViewById(R.id.login); button.setOnClickListener(this); userPresenter = new UserPresenter(this); } @Override public void onClick(View view) { String user = username.getText().toString().trim(); String pass= password.getText().toString().trim(); if (TextUtils.isEmpty(user) || TextUtils.isEmpty(pass)) { Toast.makeText(getApplicationContext(), "账号或密码不能为空", Toast.LENGTH_SHORT).show(); return; } loginProgreess = ProgressDialog.show(this, "登录", "正在登录..."); userPresenter.login(new User(user, pass)); } @Override public void onLoginSuccess() { loginProgreess.dismiss(); Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show(); } @Override public void onLoginFailed(String error) { loginProgreess.dismiss(); Toast.makeText(getApplicationContext(), "登录失败:" + error, Toast.LENGTH_SHORT).show(); } }
activity_main中
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.bwie.mvp.MainActivity"> <EditText android:id="@+id/username" android:layout_width="400dp" android:layout_height="wrap_content" /> <EditText android:id="@+id/password" android:layout_below="@id/username" android:layout_width="400dp" android:layout_height="wrap_content" /> <Button android:id="@+id/login" android:text="登录" android:layout_below="@id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>