MVP实现登陆注册

来源:互联网 发布:vb win7 64位 编辑:程序博客网 时间:2024/06/02 07:31
//主页面布局
<?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:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="**商城"        android:textColor="@android:color/holo_red_dark"        android:textSize="25sp"        android:layout_marginTop="20dp"        android:layout_gravity="center"/>    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_marginTop="50dp"        android:layout_gravity="center">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="手机号:"            android:textColor="@android:color/holo_blue_bright"            android:textSize="16sp"            android:textStyle="bold"            />        <EditText            android:layout_width="150dp"            android:layout_height="wrap_content"            android:hint="请输入手机号"            android:id="@+id/editphone"            />    </LinearLayout>    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_marginTop="20dp"        android:layout_gravity="center">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="密码:"            android:textColor="@android:color/holo_blue_bright"            android:textSize="16sp"            android:textStyle="bold"            />        <EditText            android:layout_width="150dp"            android:layout_height="wrap_content"            android:hint="请输入密码"            android:id="@+id/editpwd"            />    </LinearLayout>    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:layout_gravity="center"        android:orientation="horizontal">        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="注册"            android:id="@+id/zc"/>        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="登陆"            android:id="@+id/login"/>    </LinearLayout></LinearLayout>
//view层中的MainActivity
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;import com.bwei.presenter.MainPresenter;public class MainActivity extends AppCompatActivity implements View.OnClickListener, IMainActivity {    /**     * 请输入手机号     */    private EditText mEditphone;    /**     * 请输入密码     */    private EditText mEditpwd;    private MainPresenter mainPresenter;    /**     * 注册     */    private Button mZc;    /**     * 登陆     */    private Button mLogin;    private LinearLayout mActivityMain;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        mEditphone = (EditText) findViewById(R.id.editphone);        mEditpwd = (EditText) findViewById(R.id.editpwd);        mZc = (Button) findViewById(R.id.zc);        mZc.setOnClickListener(this);        mLogin = (Button) findViewById(R.id.login);        mLogin.setOnClickListener(this);        mActivityMain = (LinearLayout) findViewById(R.id.activity_main);        mainPresenter = new MainPresenter(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            default:                break;            case R.id.zc:                mainPresenter.postReg();                break;            case R.id.login:                mainPresenter.postLogin();                break;        }    }    @Override    public String getPhone() {        return mEditphone.getText().toString();    }    @Override    public String getPwd() {        return mEditpwd.getText().toString();    }    @Override    public void show(final com.bwei.Bean.LoginBean loginBean) {        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(MainActivity.this, loginBean.getMsg(), Toast.LENGTH_LONG).show();            }        });    }    @Override    public void shows(final String string) {        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(MainActivity.this, string, Toast.LENGTH_LONG).show();            }        });    }}

//view层中的接口
public interface IMainActivity {    public String getPhone();    public String getPwd();    public void show(com.bwei.Bean.LoginBean loginBean);    public void shows(String string);}

//utils中判断网络的工具类
import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.telephony.TelephonyManager;import java.util.ArrayList;import java.util.List;public class NetworkUtils {    private NetworkUtils() {        throw new UnsupportedOperationException("u can't instance me...");    }    public static final int NETWORK_WIFI = 1;    // wifi network    public static final int NETWORK_4G = 4;    // "4G" networks    public static final int NETWORK_3G = 3;    // "3G" networks    public static final int NETWORK_2G = 2;    // "2G" networks    public static final int NETWORK_UNKNOWN = 5;    // unknown network    public static final int NETWORK_NO = -1;   // no network    private static final int NETWORK_TYPE_GSM = 16;    private static final int NETWORK_TYPE_TD_SCDMA = 17;    private static final int NETWORK_TYPE_IWLAN = 18;    public static List<String> typeList = new ArrayList<>();    static {        typeList.add("打开网络设置界面");        typeList.add("获取活动网络信息");        typeList.add("判断网络是否可用");        typeList.add("判断网络是否是4G");        typeList.add("判断wifi是否连接状态");        typeList.add("获取移动网络运营商名称");        typeList.add("获取当前的网络类型");        typeList.add("获取当前的网络类型(WIFI,2G,3G,4G)");    }    /**     * 打开网络设置界面     * <p>3.0以下打开设置界面</p>     *     * @param context 上下文     */    public static void openWirelessSettings(Context context) {        if (android.os.Build.VERSION.SDK_INT > 10) {            context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));        } else {            context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));        }    }    /**     * 获取活动网络信息     *     * @param context 上下文     * @return NetworkInfo     */    public static NetworkInfo getActiveNetworkInfo(Context context) {        ConnectivityManager cm = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        return cm.getActiveNetworkInfo();    }    /**     * 判断网络是否可用     * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>     *     * @param context 上下文     * @return {@code true}: 可用<br>{@code false}: 不可用     */    public static boolean isAvailable(Context context) {        NetworkInfo info = getActiveNetworkInfo(context);        return info != null && info.isAvailable();    }    /**     * 判断网络是否连接     * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>     *     * @param context 上下文     * @return {@code true}: <br>{@code false}:      */    public static boolean isConnected(Context context) {        NetworkInfo info = getActiveNetworkInfo(context);        return info != null && info.isConnected();    }    /**     * 判断网络是否是4G     * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>     *     * @param context 上下文     * @return {@code true}: <br>{@code false}: 不是     */    public static boolean is4G(Context context) {        NetworkInfo info = getActiveNetworkInfo(context);        return info != null && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE;    }    /**     * 判断wifi是否连接状态     * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>     *     * @param context 上下文     * @return {@code true}: 连接<br>{@code false}: 未连接     */    public static boolean isWifiConnected(Context context) {        ConnectivityManager cm = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        return cm != null && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;    }    /**     * 获取移动网络运营商名称     * <p>如中国联通、中国移动、中国电信</p>     *     * @param context 上下文     * @return 移动网络运营商名称     */    public static String getNetworkOperatorName(Context context) {        TelephonyManager tm = (TelephonyManager) context                .getSystemService(Context.TELEPHONY_SERVICE);        return tm != null ? tm.getNetworkOperatorName() : null;    }    /**     * 获取移动终端类型     *     * @param context 上下文     * @return 手机制式     * <ul>     * <li>{@link TelephonyManager#PHONE_TYPE_NONE } : 0 手机制式未知</li>     * <li>{@link TelephonyManager#PHONE_TYPE_GSM  } : 1 手机制式为GSM,移动和联通</li>     * <li>{@link TelephonyManager#PHONE_TYPE_CDMA } : 2 手机制式为CDMA,电信</li>     * <li>{@link TelephonyManager#PHONE_TYPE_SIP  } : 3</li>     * </ul>     */    public static int getPhoneType(Context context) {        TelephonyManager tm = (TelephonyManager) context                .getSystemService(Context.TELEPHONY_SERVICE);        return tm != null ? tm.getPhoneType() : -1;    }    /**     * 获取当前的网络类型(WIFI,2G,3G,4G)     * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p>     *     * @param context 上下文     * @return 网络类型     * <ul>     * <li>{@link #NETWORK_WIFI   } = 1;</li>     * <li>{@link #NETWORK_4G     } = 4;</li>     * <li>{@link #NETWORK_3G     } = 3;</li>     * <li>{@link #NETWORK_2G     } = 2;</li>     * <li>{@link #NETWORK_UNKNOWN} = 5;</li>     * <li>{@link #NETWORK_NO     } = -1;</li>     * </ul>     */    public static int getNetWorkType(Context context) {        int netType = NETWORK_NO;        NetworkInfo info = getActiveNetworkInfo(context);        if (info != null && info.isAvailable()) {            if (info.getType() == ConnectivityManager.TYPE_WIFI) {                netType = NETWORK_WIFI;            } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {                switch (info.getSubtype()) {                    case NETWORK_TYPE_GSM:                    case TelephonyManager.NETWORK_TYPE_GPRS:                    case TelephonyManager.NETWORK_TYPE_CDMA:                    case TelephonyManager.NETWORK_TYPE_EDGE:                    case TelephonyManager.NETWORK_TYPE_1xRTT:                    case TelephonyManager.NETWORK_TYPE_IDEN:                        netType = NETWORK_2G;                        break;                    case NETWORK_TYPE_TD_SCDMA:                    case TelephonyManager.NETWORK_TYPE_EVDO_A:                    case TelephonyManager.NETWORK_TYPE_UMTS:                    case TelephonyManager.NETWORK_TYPE_EVDO_0:                    case TelephonyManager.NETWORK_TYPE_HSDPA:                    case TelephonyManager.NETWORK_TYPE_HSUPA:                    case TelephonyManager.NETWORK_TYPE_HSPA:                    case TelephonyManager.NETWORK_TYPE_EVDO_B:                    case TelephonyManager.NETWORK_TYPE_EHRPD:                    case TelephonyManager.NETWORK_TYPE_HSPAP:                        netType = NETWORK_3G;                        break;                    case NETWORK_TYPE_IWLAN:                    case TelephonyManager.NETWORK_TYPE_LTE:                        netType = NETWORK_4G;                        break;                    default:                        String subtypeName = info.getSubtypeName();                        if (subtypeName.equalsIgnoreCase("TD-SCDMA")                                || subtypeName.equalsIgnoreCase("WCDMA")                                || subtypeName.equalsIgnoreCase("CDMA2000")) {                            netType = NETWORK_3G;                        } else {                            netType = NETWORK_UNKNOWN;                        }                        break;                }            } else {                netType = NETWORK_UNKNOWN;            }        }        return netType;    }    /**     * 获取当前的网络类型(WIFI,2G,3G,4G)     * <p>依赖上面的方法</p>     *     * @param context 上下文     * @return 网络类型名称     * <ul>     * <li>NETWORK_WIFI   </li>     * <li>NETWORK_4G     </li>     * <li>NETWORK_3G     </li>     * <li>NETWORK_2G     </li>     * <li>NETWORK_UNKNOWN</li>     * <li>NETWORK_NO     </li>     * </ul>     */    public static String getNetWorkTypeName(Context context) {        switch (getNetWorkType(context)) {            case NETWORK_WIFI:                return "NETWORK_WIFI";            case NETWORK_4G:                return "NETWORK_4G";            case NETWORK_3G:                return "NETWORK_3G";            case NETWORK_2G:                return "NETWORK_2G";            case NETWORK_NO:                return "NETWORK_NO";            default:                return "NETWORK_UNKNOWN";        }    }}

//presenter层
import android.content.Context;import com.bwei.Bean.LoginBean;import com.bwei.modle.IMainModle;import com.bwei.modle.MainModle;import com.bwei.net.OnNetListener;import com.bwei.view.IMainActivity;import java.util.HashMap;import java.util.Map;public class MainPresenter {    private IMainModle iMainModle;    private IMainActivity iMainActivity;    private Context context;    public MainPresenter(IMainActivity iMainActivity) {        this.iMainActivity = iMainActivity;        iMainModle = new MainModle();        context = (Context) iMainActivity;    }    //Post请求登陆    public void postLogin() {        String url = "http://120.27.23.105/user/login";        Map<String, String> params = new HashMap<String, String>();        params.put("mobile", iMainActivity.getPhone());        params.put("password", iMainActivity.getPwd());        iMainModle.PostLogin(context, url, params, new OnNetListener<LoginBean>() {            @Override            public void onSuccess(String string) {            }            @Override            public void onSuccess(LoginBean loginBean) {                iMainActivity.show(loginBean);            }            @Override            public void onFailure(Exception e) {            }        });    }    //post请求注册    public void postReg() {        String url = "http://120.27.23.105/user/reg";        Map<String, String> params = new HashMap<>();        params.put("mobile", iMainActivity.getPhone());        params.put("password", iMainActivity.getPwd());        iMainModle.postReg(context, url, params, new OnNetListener() {            @Override            public void onSuccess(String string) {                iMainActivity.shows(string);            }            @Override            public void onSuccess(Object o) {            }            @Override            public void onFailure(Exception e) {            }        });    }}

//net中的方法
import android.content.Context;import android.widget.Toast;import com.bwei.utils.NetworkUtils;import java.util.Map;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;/** * Created by Administrator on 2017/11/3. */public class HttpUtils {    public static volatile HttpUtils httpUtils;    private static Context context;    public final OkHttpClient okHttpClient;    public HttpUtils(Context context) {        this.context = context;        okHttpClient = new OkHttpClient();    }    public static HttpUtils grtHttpUtils(Context context) {        if (httpUtils == null) {            synchronized (HttpUtils.class) {                if (httpUtils == null) {                    httpUtils = new HttpUtils(context);                }            }        }        return httpUtils;    }    /**     * Get 请求     */    public void doGet(String url, Callback callback) {        //判断是否有网        if (!NetworkUtils.isAvailable(context)) {            Toast.makeText(context, "网络不可用", Toast.LENGTH_LONG).show();            return;        }        //创建一个Resquest        Request request = new Request.Builder().url(url).build();        okHttpClient.newCall(request).enqueue(callback);    }    /**     * post请求     */    public void doPost(String url, Map<String, String> params, Callback callback) {          /*//创建一个请求          FormBody.Builder builder=new FormBody.Builder();          for(Map.Entry<String,String> entry:params.entrySet())          {              builder.add(entry.getKey(),entry.getValue());          }          FormBody forbody=builder.build();          Request request=new Request.Builder().url(url).post(forbody).build();          //发送请求          okHttpClient.newCall(request).enqueue(callback);*/        //创建一个请求        FormBody.Builder builder = new FormBody.Builder();        for (Map.Entry<String, String> entry : params.entrySet()) {            builder.add(entry.getKey(), entry.getValue());        }        FormBody formbody = builder.build();        Request request = new Request.Builder().url(url).post(formbody).build();        okHttpClient.newCall(request).enqueue(callback);    }}

//net中的接口
public interface OnNetListener<T> {    public void onSuccess(String string);    public void onSuccess(T t);    public void onFailure(Exception e);}

//model中的方法
import android.content.Context;import com.bwei.net.HttpUtils;import com.bwei.net.OnNetListener;import com.solidfire.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Callback;import okhttp3.Response;public class MainModle implements IMainModle {    //get登录    @Override    public void doLogin(Context context, String url, final OnNetListener onNetListener) {        HttpUtils.grtHttpUtils(context).doGet(url, new Callback() {            @Override            public void onFailure(okhttp3.Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(okhttp3.Call call, Response response) throws IOException {            }        });    }    //get注册    @Override    public void doReg(Context context, String url, final OnNetListener onNetListener) {        HttpUtils.grtHttpUtils(context).doGet(url, new Callback() {            @Override            public void onFailure(okhttp3.Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(okhttp3.Call call, Response response) throws IOException {                onNetListener.onSuccess(response.body().string());            }        });    }    //Post请求注册    @Override    public void postReg(Context context, String url, Map<String, String> entry, final OnNetListener onNetListener) {        HttpUtils.grtHttpUtils(context).doPost(url, entry, new Callback() {            @Override            public void onFailure(okhttp3.Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(okhttp3.Call call, Response response) throws IOException {                onNetListener.onSuccess(response.body().string());            }        });    }    //Post登陆    @Override    public void PostLogin(Context context, String url, Map<String, String> params, final OnNetListener<com.bwei.Bean.LoginBean> onNetListener) {        HttpUtils.grtHttpUtils(context).doGet(url, new Callback() {            @Override            public void onFailure(okhttp3.Call call, IOException e) {                onNetListener.onFailure(e);            }            @Override            public void onResponse(okhttp3.Call call, Response response) throws IOException {                com.bwei.Bean.LoginBean loginBean = new Gson().fromJson(response.body().string(), com.bwei.Bean.LoginBean.class);                onNetListener.onSuccess(loginBean);            }        });    }}

//model中的接口
import android.content.Context;import com.bwei.net.OnNetListener;import java.util.Map;public interface IMainModle {    public void doLogin(Context context, String url, OnNetListener onNetListener);    public void doReg(Context context, String url, OnNetListener onNetListener);    public void postReg(Context context, String url, Map<String, String> entry, OnNetListener onNetListener);    public void PostLogin(Context context, String url, Map<String, String> params, OnNetListener<com.bwei.Bean.LoginBean> onNetListener);}

//bean中的实体类
public class LoginBean {    /**     * msg : 登录成功     * code : 0     * data : {"age":null,"appkey":"842a5c44a0323518","appsecret":"C8B0FCCF7BFDCDCE0D9BA142BBB37557","createtime":"2017-11-02T16:08:46","email":null,"gender":null,"icon":null,"mobile":"15612346598","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","token":null,"uid":1454,"username":"15612346598"}     */    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 : 842a5c44a0323518         * appsecret : C8B0FCCF7BFDCDCE0D9BA142BBB37557         * createtime : 2017-11-02T16:08:46         * email : null         * gender : null         * icon : null         * mobile : 15612346598         * money : null         * nickname : null         * password : 8F669074CAF5513351A2DE5CC22AC04C         * token : null         * uid : 1454         * username : 15612346598         */        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 Object 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 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;        }    }}

原创粉丝点击