Mvp实现登录注册

来源:互联网 发布:sql server 默认值 编辑:程序博客网 时间:2024/05/16 08:36

注册的Activity

public class MainActivity extends AppCompatActivity implements NewsView{    EditText et_my1;    EditText et_my2;    Button bt_my;    Button bt_my2;    private NewsPS newsPS;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        et_my1= (EditText) findViewById(R.id.et_my1);        et_my2 = (EditText) findViewById(R.id.et_my2);        bt_my = (Button) findViewById(R.id.bt_my);        bt_my2 = (Button) findViewById(R.id.bt_my2);        newsPS = new NewsPS(this);        bt_my.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (newsPS!=null){                    newsPS.LoginTrueP(MainActivity.this,et_my1.getText().toString(),                            et_my2.getText().toString()                            );                }            }        });        bt_my2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent(MainActivity.this,DengLuYeMian.class);                startActivity(intent);            }        });    }    @Override    public void LoginTrueS() {           et_my1.setError("1");    }    @Override    public void LoginFalseS() {        et_my2.setError("1");    }    @Override    public void LoginTrue() {        Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();    }    @Override    public void LoginFalse() {    }}
布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.zhangyongbo.mydenglu.MainActivity">    <EditText        android:id="@+id/et_my1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="账号"        />    <EditText        android:id="@+id/et_my2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="密码"        />    <Button        android:id="@+id/bt_my2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="登录"        />        <Button            android:id="@+id/bt_my"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="注册"            /></LinearLayout>

View层接口

注册的

public interface NewsView  {    void LoginTrueS();    void LoginFalseS();    void LoginTrue();    void LoginFalse();}
登录的
public interface ViewDenglu {    void LoginTrueS();    void LoginFalseS();    void LoginTrue();    void LoginFalse();}

总结口

public interface JieKoiHuiDiao  {    void JieKoiHuiDiaoTrueS();//用于做判断    void JieKoiHuiDiaoFalseS();//用于做判断    void JieKoiHuiDiaoTrue();//用于传值    void JieKoiHuiDiaoFalse();//用于传值}
Modle层注册接口

public interface NewsMoudle  {    //在接口里下两个方法到类里去实现接口并且实现方法    void LoginFalse(Context context,String name,String paw);    void LoginTrue(Context context,String name,String paw);}
Modle层注册类数据请求

public class NewsMoudles implements   NewsMoudle {    private JieKoiHuiDiao jieKoiHuiDiao;     String url="http://120.27.23.105/user/reg";    public NewsMoudles(JieKoiHuiDiao jieKoiHuiDiao) {        this.jieKoiHuiDiao = jieKoiHuiDiao;    }    @Override    public void LoginFalse(Context context, String name, String paw) {        if (TextUtils.isEmpty(name)){            jieKoiHuiDiao.JieKoiHuiDiaoTrueS();        }        if(TextUtils.isEmpty(paw)){            jieKoiHuiDiao.JieKoiHuiDiaoFalseS();        }        LoginTrue(context,name,paw);    }    @Override    public void LoginTrue(final Context context, String name, String paw) {        Map<String,String> LoginMap = new HashMap<>();        LoginMap.put("mobile",name);        LoginMap.put("password",paw);        OkHttp3Utils.doPost(url, LoginMap, new GsonObjectCallback<NewsBean>() {            @Override            public void onUi(NewsBean newsBean) {                if (newsBean.getCode().equals("0")){                    jieKoiHuiDiao.JieKoiHuiDiaoTrue();                    Toast.makeText(context, "乘法", Toast.LENGTH_SHORT).show();                }            }            @Override            public void onFailed(Call call, IOException e) {            }        });    }}
Presenter层注册接口

public interface NewsP {    void LoginTrueP(Context context,String name,String paw);}
Presenter注册类

public class NewsPS implements  NewsP , JieKoiHuiDiao{    private NewsView newsView;    private final NewsMoudle moudle;    public NewsPS(NewsView newsView) {        this.newsView = newsView;        moudle = new NewsMoudles(this);    }    @Override    public void LoginTrueP(Context context, String name, String paw) {        moudle.LoginFalse(context,name,paw);    }    @Override    public void JieKoiHuiDiaoTrueS() {        if (newsView!=null){            newsView.LoginTrueS();        }    }    @Override    public void JieKoiHuiDiaoFalseS() {        if (newsView!=null){            newsView.LoginFalseS();        }    }    @Override    public void JieKoiHuiDiaoTrue() {        if (newsView!=null){            newsView.LoginTrue();        }    }    @Override    public void JieKoiHuiDiaoFalse() {        if (newsView!=null){            newsView.LoginFalse();        }    }}
登录的Activity
public class DengLuYeMian extends Activity implements ViewDenglu{    EditText et_dL1;    EditText et_dL2;    Button but_bl;    private NewsPdls newsPdls;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.denglu);        et_dL1 = findViewById(R.id.et_dL1);        et_dL2 = findViewById(R.id.et_dL2);        but_bl = findViewById(R.id.but_bl);        newsPdls = new NewsPdls(this);        but_bl.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (newsPdls!=null){                    newsPdls.LoginTrueP(DengLuYeMian.this,et_dL1.getText().toString(),et_dL2.getText().toString());                                }            }        });    }    @Override    public void LoginTrueS() {          et_dL1.setError("1");    }    @Override    public void LoginFalseS() {        et_dL2.setError("2");    }    @Override    public void LoginTrue() {        Toast.makeText(DengLuYeMian.this, "成功", Toast.LENGTH_SHORT).show();    }    @Override    public void LoginFalse() {        Toast.makeText(DengLuYeMian.this, "失败", Toast.LENGTH_SHORT).show();    }}
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <EditText        android:id="@+id/et_dL1"        android:textSize="15dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="账号"        />    <EditText        android:id="@+id/et_dL2"        android:textSize="15dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="密码"        />    <Button        android:id="@+id/but_bl"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="登录"        /></LinearLayout>
Modle层登录接口
public interface NewsdengluS {    //在接口里下两个方法到类里去实现接口并且实现方法    void LoginFalse(Context context, String name, String paw);    void LoginTrue(Context context,String name,String paw);}
Modle层登录类请求数据
public class NewsDnglu  implements NewsdengluS {       private JieKoiHuiDiao jieKoiHuiDiao;        String  is ="http://120.27.23.105/user/login";    public NewsDnglu(JieKoiHuiDiao jieKoiHuiDiao) {        this.jieKoiHuiDiao = jieKoiHuiDiao;    }    @Override    public void LoginFalse(Context context, String name, String paw) {            if (TextUtils.isEmpty(name)){                jieKoiHuiDiao.JieKoiHuiDiaoTrueS();            }             if (TextUtils.isEmpty(paw)){            jieKoiHuiDiao.JieKoiHuiDiaoFalseS();         }        LoginTrue(context,name,paw);    }    @Override    public void LoginTrue(final Context context, String name, String paw) {        Map<String,String> map = new HashMap<>();        map.put("mobile",name);        map.put("password",paw);        OkHttp3Utils.doPost(is, map, new GsonObjectCallback<NewsDl>() {            @Override            public void onUi(NewsDl newsDl) {                if (newsDl.getCode().equals("0")){                    jieKoiHuiDiao.JieKoiHuiDiaoTrue();                    Intent intent = new Intent(context, GeRenActivity.class);                    intent.putExtra("name",newsDl.getData().getUsername());                    context.startActivity(intent);                }            }            @Override            public void onFailed(Call call, IOException e) {            }        });    }}
Presenter层的登录接口
public interface NewsPDl {    void LoginTrueP(Context context, String name, String paw);}

Presenter层的登录类
public class NewsPdls implements  NewsPDl ,JieKoiHuiDiao{     private ViewDenglu viewDenglu;    private final NewsdengluS newsdengluS;    public NewsPdls(ViewDenglu viewDenglu) {        this.viewDenglu = viewDenglu;        //多态        newsdengluS = new NewsDnglu(this);    }    @Override    public void LoginTrueP(Context context, String name, String paw) {        newsdengluS.LoginFalse(context,name,paw);    }    @Override    public void JieKoiHuiDiaoTrueS() {            if (viewDenglu!=null){                viewDenglu.LoginTrueS();            }    }    @Override    public void JieKoiHuiDiaoFalseS() {        if (viewDenglu!=null){            viewDenglu.LoginFalseS();        }    }    @Override    public void JieKoiHuiDiaoTrue() {        if (viewDenglu!=null){            viewDenglu.LoginTrue();        }    }    @Override    public void JieKoiHuiDiaoFalse() {        if (viewDenglu!=null){            viewDenglu.LoginFalse();        }    }}
登录成功后跳转的页面
public class GeRenActivity extends AppCompatActivity {  TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_ge_ren);        Intent intent = getIntent();        String name = intent.getStringExtra("name");        tv = (TextView) findViewById(R.id.tv);        tv.setText(name);    }}
布局文件
<?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:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.zhangyongbo.mydenglu.GeRenActivity">  <TextView      android:id="@+id/tv"      android:layout_width="wrap_content"      android:layout_height="wrap_content" /></RelativeLayout>
下面是所用到的Bean包
注册的bean包
public class NewsBean {    /**     * msg : 天呢!用户名或密码不能为空     * code : 1     * data : {}     */    private String msg;    private String code;    private String 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 String getData() {        return data;    }    public void setData(String data) {        this.data = data;    }}
登录的Bean包
public class NewsDl {    /**     * msg : 登录成功     * code : 0     * data : {"age":null,"appkey":"4a1c72e3c8593a53","appsecret":"9FCD2D1610DBB9F176024508997C6942","createtime":"2017-11-09T20:56:03","email":null,"gender":null,"icon":null,"mobile":"17600261322","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","token":"8FF97958783CDC48E70CE649E8A8A660","uid":1913,"username":"17600261322"}     */    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 : 4a1c72e3c8593a53         * appsecret : 9FCD2D1610DBB9F176024508997C6942         * createtime : 2017-11-09T20:56:03         * email : null         * gender : null         * icon : null         * mobile : 17600261322         * money : null         * nickname : null         * password : 8F669074CAF5513351A2DE5CC22AC04C         * token : 8FF97958783CDC48E70CE649E8A8A660         * uid : 1913         * username : 17600261322         */        private Object age;        private String appkey;        private String appsecret;        private String createtime;        private Object email;        private Object gender;        private Object icon;        private String mobile;        private Object money;        private Object nickname;        private String password;        private String token;        private int uid;        private String username;        public Object getAge() {            return age;        }        public void setAge(Object age) {            this.age = age;        }        public String getAppkey() {            return appkey;        }        public void setAppkey(String appkey) {            this.appkey = appkey;        }        public String getAppsecret() {            return appsecret;        }        public void setAppsecret(String 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 Object getGender() {            return gender;        }        public void setGender(Object 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 Object getMoney() {            return money;        }        public void setMoney(Object 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 String getToken() {            return token;        }        public void setToken(String 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;        }    }}

这里用到的是OkHttp请求数据那就需要自己封装了
这是用到的网络权限
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这是用到的依赖
compile 'com.android.support:appcompat-v7:26.0.0-alpha1'compile 'com.jakewharton:butterknife:7.0.0'compile 'com.squareup.okhttp3:okhttp:3.2.0'compile 'com.squareup.okio:okio:1.7.0'compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'compile 'com.squareup.picasso:picasso:2.5.2'compile files('libs/gson-2.2.4.jar')
下面是把EdText输入框变成框框
android:background="@android:drawable/alert_light_frame"