MVP(登录+注册 .乞丐版)

1.登录布局

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".model.MainActivity"
    android:orientation="vertical"
    >
        <EditText
        android:id="@+id/etname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入账号"
        android:layout_gravity="center_horizontal"/>

        <EditText
        android:id="@+id/etpass"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:layout_gravity="center_horizontal"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="100dp"
            android:layout_gravity="center_horizontal">
                <Button
                    android:id="@+id/deng"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="登录"
                    android:layout_marginTop="50dp"
                    android:layout_gravity="center_horizontal"/>
                <Button
                    android:id="@+id/zhu"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="注册"
                    android:layout_marginTop="50dp"
                    android:layout_gravity="center_horizontal"/>
        </LinearLayout>

</LinearLayout>

注册布局

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".model.Main2Activity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/ename"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入账号"
        android:layout_gravity="center"/>
    <EditText
        android:id="@+id/epass"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:layout_marginTop="50dp"
        android:layout_gravity="center"/>

    <Button
        android:id="@+id/sing"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册"
        android:layout_marginTop="50dp"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

2.V

package com.bw.ymy.mvptext1.view;

public interface IView<T> {

    //成功
    void success(T data);
    //失败
    void fail(String msg);
}

3.M

登录

package com.bw.ymy.mvptext1.model;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.bw.ymy.mvptext1.R;
import com.bw.ymy.mvptext1.presemter.Login;
import com.bw.ymy.mvptext1.view.IView;

/**
 * 1.首先创建一个 Interstance View接口类
 * 2.主页面继承 Activity implements View.OnClickListener, 上一步写的类
 *
 *
 *
 */

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

    EditText etname,etpass;
    //P
    Login mlogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建一个方法,获取资源id
        initView();
        //创建一个实列
        initPersenter();
    }

    private void initPersenter() {
        mlogin=new Login(this);
    }

    //获取资源id
    private void initView() {
        etname=findViewById(R.id.etname);
        etpass=findViewById(R.id.etpass);
        //无效  作废
        etpass.invalidate();
        //点击登录       http://120.27.23.105/user/login?mobile=手机号&password=密码
        findViewById(R.id.deng).setOnClickListener(this);
        //点击注册    http://120.27.23.105/user/reg?mobile=手机号&password=密码
        findViewById(R.id.zhu).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        int id=v.getId();
        switch (id)
        {
            //点击登录
            case R.id.deng:
                //吧User类拿过来 引用
                User user=new User(etname.getText().toString(),etpass.getText().toString());

                mlogin.submit(user);
                break;
                //点击注册
            case R.id.zhu:
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                break;
                default:
                    break;
        }
    }
    //解绑
    @Override
    protected void onDestroy() {
        super.onDestroy();


        mlogin.detachView();
    }

        //成功
    @Override
    public void success(Object data) {
        Toast.makeText(this,"success",Toast.LENGTH_LONG).show();
    }
        //失败
     @Override
    public void fail(String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
    }
}

3.1 注册

package com.bw.ymy.mvptext1.model;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.bw.ymy.mvptext1.R;
import com.bw.ymy.mvptext1.presemter.Sing;
import com.bw.ymy.mvptext1.view.IView;

public class Main2Activity extends AppCompatActivity implements View.OnClickListener,IView
{
    private EditText ename,epass;
    Sing sing;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initview();
        initpersenter();
    }

    private void initpersenter() {
        sing=new Sing(this);
    }

    private void initview() {
        //获取资源id
        ename=findViewById(R.id.ename);
        epass=findViewById(R.id.epass);
        epass.invalidate();
        findViewById(R.id.sing).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id=v.getId();
        switch (id)
        {
            case R.id.sing:
                User user=new User(ename.getText().toString(),epass.getText().toString());
                sing.submit(user);
                break;
        }

    }

    @Override
    public void success(Object data) {

        Toast.makeText(this,"成功",Toast.LENGTH_LONG).show();
    }

    @Override
    public void fail(String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
    }
}

3.2 User类

package com.bw.ymy.mvptext1.model;

public class User {


    private String name;
    private String pass;

    public User(String name, String pass) {
        this.name = name;
        this.pass = pass;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
}

4.P

登录

package com.bw.ymy.mvptext1.presemter;

import android.support.annotation.NonNull;
import android.text.TextUtils;

import com.bw.ymy.mvptext1.Bean.LoginBean;
import com.bw.ymy.mvptext1.Utils.Netius;
import com.bw.ymy.mvptext1.model.User;
import com.bw.ymy.mvptext1.view.IView;

public class Login {

    //把第一个实列拿过来
    private IView mIView;

    public  Login(@NonNull IView iView)
    {
        mIView=iView;
    }
    public  void  submit(User user)
    {
        if(checkName(user.getName())&&checkPass(user.getPass()))
        {
        Netius.getInsatnce().requestData("http://120.27.23.105/user/login?mobile="+user.getName()+"&password="+user.getPass(),
                LoginBean.class,new Netius.Callback<LoginBean>(){
                    @Override
                    public void onsuccess(LoginBean loginBean) {
                        if(loginBean.getCode()==0)
                        {
                            mIView.success(loginBean);
                        }else
                        {
                            mIView.fail("账号密码失败");
                        }
                    }
                });
        }
        else
        {
            mIView.fail("账号或者密码错误");
        }
    }

    public  void  detachView()
    {
        mIView=null;
    }
    //判断账号
    private  boolean checkName(String name)
    {
        return  !TextUtils.isEmpty(name);
    }
    //判断密码大于6位
    private  boolean checkPass(String pass)
    {
        return (!TextUtils.isEmpty(pass)&&pass.length()>=6);
    }

}

4.1 注册

package com.bw.ymy.mvptext1.presemter;

import com.bw.ymy.mvptext1.Bean.SingBean;
import com.bw.ymy.mvptext1.Utils.Netius;
import com.bw.ymy.mvptext1.model.User;
import com.bw.ymy.mvptext1.view.IView;

public class Sing {

    private IView iView;

    public Sing(IView iView) {
        this.iView = iView;
    }

    public  void submit(User user)
    {
        if(checkName(user.getName())&&checkPass(user.getPass()))
        {
            Netius.getInsatnce().requestData("http://120.27.23.105/user/reg?mobile="+user.getName()+"&password="+user.getPass(),
                    SingBean.class,new Netius.Callback<SingBean>(){
                        @Override
                        public void onsuccess(SingBean singBean) {

                            if(singBean.getCode()==0)
                            {
                                iView.success(singBean);
                            }else
                            {
                                iView.fail(singBean.getMsg());
                            }

                    }
                    });

        }else
        {
            iView.fail("请输入正确的账号和密码");
        }
    }
    //解绑
    public  void detach()
    {
        iView=null;
    }
    //判断密码不少于6位
    protected  boolean checkPass(String pass)
    {
        return  !pass.isEmpty()&&pass.length()==6;
    }
    //判断手机号大于11位
    private boolean checkName(String name)
    {
        return  !name.isEmpty()&&name.length()==11;
    }
}

5.工具类

package com.bw.ymy.mvptext1.Utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Netius {
    private static Netius insatnce;

    public Netius() {
    }

    public static  Netius getInsatnce()
    {
        if(insatnce==null)
        {
            insatnce=new Netius();
        }
        return  insatnce;
    }

    public  interface  Callback<T>
    {
        void  onsuccess(T t);
    }
    //是否可以用网络
    public  boolean hasNetWork(Context context)
    {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
        return  activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
    }
    //判断是否是手机网络
    public  boolean isMobile(Context context)
    {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
        return  activeNetworkInfo.getType()==ConnectivityManager.TYPE_MOBILE;

    }

    public  void  requestData(final  String urlstr,final  Class clazz,final Callback callback)
    {
        new AsyncTask<String,Void,Object>()
        {
            @Override
            protected Object doInBackground(String... strings) {
                return requestData(urlstr,clazz);
            }

            @Override
            protected void onPostExecute(Object o) {
                callback.onsuccess(o);
            }
        }.execute(urlstr);
    }
    public <T> T requestData(String  urlstr,Class clazz)
    {
        return (T)new Gson().fromJson(requestData(urlstr),clazz);
    }

    public  String requestData(String urlstr)
    {
        String result="";

        try {
            URL url=new URL(urlstr);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            int responseCode = urlConnection.getResponseCode();
            if(responseCode==200){
                String s = streamTostring(urlConnection.getInputStream());
                return s;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    public  String streamTostring(InputStream is)throws IOException
    {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
        StringBuilder builder=new StringBuilder();
        for (String tmp=bufferedReader.readLine();tmp!=null;tmp=bufferedReader.readLine()){
            builder.append(tmp);
        }
        return builder.toString();

    }
}

6.

登录的Bean类

package com.bw.ymy.mvptext1.Bean;

public class LoginBean {
    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"dba243496835d7fe","appsecret":"075A1D91B6EA54A018F21DA8DA1CE0A8","createtime":"2018-11-27T19:52:50","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"15233802510","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"BB3D32DAA139E7646E92FD86DAE83DD5","uid":22989,"userId":null,"username":"15233802510"}
     */

    private String msg;
    private int code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * age : null
         * appkey : dba243496835d7fe
         * appsecret : 075A1D91B6EA54A018F21DA8DA1CE0A8
         * createtime : 2018-11-27T19:52:50
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : null
         * latitude : null
         * longitude : null
         * mobile : 15233802510
         * money : null
         * nickname : null
         * password : 8F669074CAF5513351A2DE5CC22AC04C
         * praiseNum : null
         * token : BB3D32DAA139E7646E92FD86DAE83DD5
         * uid : 22989
         * userId : null
         * username : 15233802510
         */


        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        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 getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        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 Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        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 Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        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 Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}

注册的

package com.bw.ymy.mvptext1.Bean;

public class SingBean {

    private  String msg;
    private  int code;

    public SingBean(String msg, int code) {
        this.msg = msg;
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}

效果图:

猜你喜欢

转载自blog.csdn.net/qq_42902175/article/details/84832129