mainactivity
<?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"
android:orientation="vertical"
tools:context=".view.MainActivity">
<EditText
android:id="@+id/tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号"/>
<EditText
android:id="@+id/pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"/>
<Button
android:id="@+id/login_bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
been
package com.sacura.gengxin.bean;
public class Login_bean {
/**
* msg : 登录成功
* code : 0
* data : {"age":null,"appkey":"bed28630afa6c026","appsecret":"6AE46B36472C67D39A088513A35DBE4C","createtime":"2018-08-27T11:45:07","email":null,"fans":null,"follow":null,"gender":null,"icon":"https://www.zhaoapi.cn/images/1519910223225head.jpg","latitude":null,"longitude":null,"mobile":"18600218366","money":null,"nickname":"广泛广泛","password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"6EED26921A4314B8C728101D84931F38","uid":11103,"userId":null,"username":"18600218366"}
*/
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 : bed28630afa6c026
* appsecret : 6AE46B36472C67D39A088513A35DBE4C
* createtime : 2018-08-27T11:45:07
* email : null
* fans : null
* follow : null
* gender : null
* icon : https://www.zhaoapi.cn/images/1519910223225head.jpg
* latitude : null
* longitude : null
* mobile : 18600218366
* money : null
* nickname : 广泛广泛
* password : 8F669074CAF5513351A2DE5CC22AC04C
* praiseNum : null
* token : 6EED26921A4314B8C728101D84931F38
* uid : 11103
* userId : null
* username : 18600218366
*/
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 String icon;
private Object latitude;
private Object longitude;
private String mobile;
private Object money;
private String 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 String getIcon() {
return icon;
}
public void setIcon(String 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 String getNickname() {
return nickname;
}
public void setNickname(String 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;
}
}
}
m
package com.sacura.gengxin.mode;
import com.sacura.gengxin.bean.Login_bean;
import com.sacura.gengxin.util.Api;
import com.sacura.gengxin.util.Util;
import java.util.Map;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class Mymode {
/**
* 登录的方法
* */
public void loginm(Map<String,String> map, final Getloginm getloginm){
Util.getmInstance().getnetjson(Api.net).postUsermap(map)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Login_bean>() {
@Override
public void accept(Login_bean login_bean) throws Exception {
getloginm.getloginbean(login_bean);
}
});
}
public interface Getloginm{
void getloginbean(Login_bean login_bean);
}
}
p
package com.sacura.gengxin.presenter;
import android.content.Context;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;
import com.sacura.gengxin.bean.Login_bean;
import com.sacura.gengxin.mode.Mymode;
import com.sacura.gengxin.util.Validator;
import com.sacura.gengxin.view.Ilogin;
import java.util.HashMap;
import java.util.Map;
public class Mypresenter {
private Ilogin ilogin;
private Mymode mymode;
private Context context;
public Mypresenter(Ilogin ilogin, Context context) {
this.ilogin = ilogin;
this.context = context;
mymode=new Mymode();
}
/**
* 登录验证的方法
* */
public void islogin(EditText tel,EditText pwd){
String teltype = tel.getText().toString();
String pwdtype = pwd.getText().toString();
if (TextUtils.isEmpty(teltype)){
Toast.makeText(context, "手机号不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (!Validator.isMobile(teltype)) {
Toast.makeText(context, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(pwdtype)){
Toast.makeText(context, "密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
Map<String,String> map=new HashMap<>();
map.put("mobile",teltype);
map.put("password",pwdtype);
loginp(map);
}
/**
* 登录的方法
* */
public void loginp(Map<String,String> map){
mymode.loginm(map, new Mymode.Getloginm() {
@Override
public void getloginbean(Login_bean login_bean) {
if (login_bean.getCode().equals("0")){
ilogin.succeed(login_bean);
}else {
ilogin.defeated(login_bean.getMsg());
}
}
});
}
}
v
package com.sacura.gengxin.view;
import com.sacura.gengxin.bean.Login_bean;
public interface Ilogin {
void succeed(Login_bean login_bean);
void defeated(String str);
}
--------------------
------------------------------------------------------------------------
package com.sacura.gengxin.view;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.sacura.gengxin.R;
import com.sacura.gengxin.bean.Login_bean;
import com.sacura.gengxin.presenter.Mypresenter;
public class MainActivity extends AppCompatActivity implements Ilogin,View.OnClickListener{
private Mypresenter mypresenter;
private EditText tel;
private EditText pwd;
private Button login_bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mypresenter = new Mypresenter(this,this);
tel = findViewById(R.id.tel);
pwd = findViewById(R.id.pwd);
login_bt = findViewById(R.id.login_bt);
login_bt.setOnClickListener(this);
}
@Override
public void succeed(Login_bean login_bean) {
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
}
@Override
public void defeated(String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.login_bt:
mypresenter.islogin(tel,pwd);
break;
}
}
}
utils
package com.sacura.gengxin.util;
public interface Api {
public String net="http://120.27.23.105/";
}
---------------------------------------------------------------------------------------------------
package com.sacura.gengxin.util;
import com.sacura.gengxin.bean.Login_bean;
import java.util.Map;
import io.reactivex.Observable;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface Testservice {
@POST("user/login")
@FormUrlEncoded
Observable<Login_bean> postUsermap(@FieldMap Map<String,String> map);
}
-----------------------------------------------------------------------------------
package com.sacura.gengxin.util;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class Util {
private volatile static Util util=null;
private Util(){
}
public static Util getmInstance(){
if (util==null){
synchronized (Util.class){
if (util==null){
util=new Util();
}
}
}
return util;
}
//ok拦截日志
OkHttpClient httpClient = new OkHttpClient.Builder().
addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
public Testservice getnetjson(String uri) {
Retrofit retrofit = new Retrofit.Builder().baseUrl(uri)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(httpClient)//添加拦截器时用
.build();
Testservice testservive = retrofit.create(Testservice.class);
return testservive;
}
}
-------------------------------------------------------------------------------------
package com.sacura.gengxin.util;
import java.util.regex.Pattern;
/**
* 校验器:利用正则表达式校验邮箱、手机号等
*/
public class Validator {
/**
* 正则表达式:验证用户名
*/
public static final String REGEX_USERNAME = "^[a-zA-Z0-9]{6,20}$";
/**
* 正则表达式:验证密码(字母+数字)
* <p>
* ^ 匹配一行的开头位置
* (?![0-9]+$) 预测该位置后面不全是数字
* (?![a-zA-Z]+$) 预测该位置后面不全是字母
* [0-9A-Za-z] {8,16} 由8-16位数字或这字母组成
* $ 匹配行结尾位置
* 注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。
*/
public static final String REGEX_PASSWORD = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,15}$";
/**
* 正则表达式:验证手机号
*/
public static final String REGEX_MOBILE =
"^((13[0-9])|(15[^4,\\D])|(16[0-9])|(18[0-9])|(17[0-9]))\\d{8}$";
//public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,2,5-9])|(17[0-9]))\\d{8}$";
//public static final String REGEX_MOBILE = "^(1[0-9][0-9])\\d{8}$";
/**
* 正则表达式:验证邮箱
*/
//public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[_-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
public static final String REGEX_EMAIL =
"^[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$";
;
/**
* 正则表达式:验证汉字
*/
public static final String REGEX_CHINESE = "^[\u4e00-\u9fa5],{0,}$";
/**
* 正则表达式:验证身份证
*/
public static final String REGEX_ID_CARD = "(^\\d{18}$)|(^\\d{15}$)";
/**
* 正则表达式:验证URL
*/
public static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
/**
* 正则表达式:验证IP地址
*/
public static final String REGEX_IP_ADDR = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
/**
* 校验用户名
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isUsername(String username) {
return Pattern.matches(REGEX_USERNAME, username);
}
/**
* 校验密码
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isPassword(String password) {
return Pattern.matches(REGEX_PASSWORD, password);
}
/**
* 校验手机号
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isMobile(String mobile) {
//Pattern p = Pattern.compile(MOBILE_PHONE_RE);
//Matcher m = p.matcher(mobiles);
//return m.matches();
return Pattern.matches(REGEX_MOBILE, mobile);
}
/**
* 校验邮箱
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isEmail(String email) {
return Pattern.matches(REGEX_EMAIL, email);
}
/**
* 校验汉字
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isChinese(String chinese) {
return Pattern.matches(REGEX_CHINESE, chinese);
}
/**
* 校验身份证
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isIDCard(String idCard) {
if (idCard.toUpperCase().matches("(^\\d{15}$)|(^\\d{17}([0-9]|X)$)")) {
return true;
} else {
return false;
}
}
/**
* 校验URL
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isUrl(String url) {
return Pattern.matches(REGEX_URL, url);
}
/**
* 校验IP地址
*/
public static boolean isIPAddr(String ipAddr) {
return Pattern.matches(REGEX_IP_ADDR, ipAddr);
}
public static void main(String[] args) {
String username = "fdsdfsdj";
System.out.println(Validator.isUsername(username));
System.out.println(Validator.isChinese(username));
}
/**
* 校验车牌号
*
* @return 校验通过返回true,否则返回false
*/
public static boolean isCarCode(String carCode) {
String carnumRegex = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}";
if (carCode.toUpperCase().matches(carnumRegex)) {
return true;
} else {
return false;
}
}
/**
* 判断是否是车牌号
*/
public static boolean isCarNo(String CarNum) {
//匹配第一位汉字
String str = "京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼甲乙丙己庚辛壬寅辰戍午未申";
if (!(CarNum == null || CarNum.equals(""))) {
String s1 = CarNum.substring(0, 1);//获取字符串的第一个字符
if (str.contains(s1)) {
String s2 = CarNum.substring(1, CarNum.length());
//不包含I O i o的判断
if (s2.contains("I") || s2.contains("i") || s2.contains("O") || s2.contains("o")) {
return false;
} else {
if (!CarNum.matches("^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$")) {
return true;
}
}
} else {
return false;
}
} else {
return false;
}
return false;
}
/**
* * 验证输入的名字是否为“中文”或者是否包含“·”
*/
public static boolean isLegalName(String name){
if (name.contains("·") || name.contains("•")){
if (name.matches("^[\\u4e00-\\u9fa5]+[·•][\\u4e00-\\u9fa5]+$")){
return true;
}else {
return false;
}
}else {
if (name.matches("^[\\u4e00-\\u9fa5]+$")){
return true;
}else {
return false;
}
}
}
}