登陆注册(sp,友盟登录,二维码,网络请求,Mvp框架)

bean层


    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;
    }
public class Result<T> {
    int code;
    String msg;
    T data;

    public int getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

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

    public T getData() {
        return data;
    }

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

core层

第一步:接口

public interface DataCall<T> {
    void success(T data);
    void fail(Result result);
}

第二步:Application的配置

public class XFApp extends Application {
    private static XFApp instance;
    private SharedPreferences mSharedPreferences;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        mSharedPreferences = getSharedPreferences("application",
                Context.MODE_PRIVATE);
        UMConfigure.init(this,"5c089159b465f59767000066","小米",UMConfigure.DEVICE_TYPE_PHONE,"");
        /**
         * 设置组件化的Log开关
         * 参数: boolean 默认为false,如需查看LOG设置为true
         */
        UMConfigure.setLogEnabled(true);
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
    }

    public static XFApp getInstance() {
        return instance;
    }

    public SharedPreferences getShare() {
        return mSharedPreferences;
    }
}

第三步:BasePresenter


public abstract class BasePresenter {
    DataCall dataCall;
    public BasePresenter(DataCall dataCall) {
        this.dataCall=dataCall;
    }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Result result = (Result) msg.obj;
            if (result.getCode()==0){
                dataCall.success(result.getData());
            }else{
                dataCall.fail(result);
            }
        }
    };
    public void requestData(final String... args){
        new Thread(new Runnable() {
            @Override
            public void run() {
                Message message = handler.obtainMessage();
                message.obj=getData(args);
                handler.sendMessage(message);
            }
        }).start();
    }

    protected abstract Result getData(String...args);
}

http层

第一步:网络层

public static String get(String urlString){
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
          /*  urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置
            urlConnection.setConnectTimeout(8000);//设置链接超时间*/
            InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流;
            //可拼接的字符串
            StringBuilder stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String temp = "";
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuilder.append(temp);
                temp = "";
            }
            //这个是网络获取的数据
            String data = stringBuilder.toString();
            Log.e("xf",data);
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

第二步:判断手机号


public class StringUtil {
    public static boolean isPhone(String phone){
        String regex="^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        if (phone.length()!=11){
            return false;
        }else {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phone);
            boolean matches = m.matches();
            return matches;
        }
    }
}

model层 

public static Result login(final String mobile,final String pwd){
        String resultString = Utils.get("http://www.zhaoapi.cn/user/reg?mobile="
                + mobile + "&password=" + pwd);
        Gson gson=new Gson();
        Type type=new TypeToken<Result<User>>(){}.getType();
        Result result = gson.fromJson(resultString, type);
        return result;
    }
public static Result reg(final String mobile, final String pwd){
        String resultString = Utils.get("http://www.zhaoapi.cn/user/login?mobile="
        + mobile+"&password="+pwd);

        Gson gson = new Gson();


        Type type = new TypeToken<Result<User>>() {}.getType();

        Result result= gson.fromJson(resultString,type);

        return result;
    }

presenter层


public class LoginPresenter extends BasePresenter {
    public LoginPresenter(DataCall dataCall) {
        super(dataCall);
    }

    @Override
    protected Result getData(String... args) {
        Result login = LoginModel.reg(args[0], args[1]);
        return login;
    }
}

public class Presenter extends BasePresenter {
    public Presenter(DataCall dataCall) {
        super(dataCall);
    }

    @Override
    protected Result getData(String... args) {
        Result result = Model.login(args[0], args[1]);
        return result;
    }
}

public class MainActivity extends AppCompatActivity implements View.OnClickListener
        ,DataCall<User>,CompoundButton.OnCheckedChangeListener {

    private EditText phone,password;
    private CheckBox zddl,jzmm;
    LoginPresenter presenter=new LoginPresenter(this);
    private SharedPreferences sp;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         phone = findViewById(R.id.phone);
         password = findViewById(R.id.password);
         zddl = findViewById(R.id.zddl);
         jzmm = findViewById(R.id.jzmm);
         findViewById(R.id.DengLu).setOnClickListener(this);
         findViewById(R.id.ZhuCe).setOnClickListener(this);
         findViewById(R.id.QQ).setOnClickListener(this);
         sp = XFApp.getInstance().getShare();
         if (sp.getString("user",null)!=null){
             Intent intent=new Intent(this,ThreeActivity.class);
             startActivity(intent);
             finish();
         }
        boolean login = sp.getBoolean("login", false);
        jzmm.setChecked(login);
        if (login){
            phone.setText(sp.getString("phone",""));
            password.setText(sp.getString("password",""));
        }

        jzmm.setOnCheckedChangeListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.DengLu:
                final String mobile = phone.getText().toString();
                final String pass = password.getText().toString();
                Log.e("xf",mobile);
                Log.e("xf",pass);
                if (!StringUtil.isPhone(mobile)){
                    Toast.makeText(this,"请输入正确手机号",Toast.LENGTH_SHORT).show();
                    return;
                }
                if (pass.length()<6){
                    Toast.makeText(this,"密码最少6位",Toast.LENGTH_LONG).show();
                    return;
                }
                boolean b = sp.getBoolean("login", false);
                if (b){
                    SharedPreferences.Editor edit = sp.edit();
                    edit.putString("phone",mobile);
                    edit.putString("password",pass);
                    edit.commit();
                }
                presenter.requestData(mobile,pass);
                break;
            case R.id.ZhuCe:
                Intent intent = new Intent(this,TwoActivity.class);
                startActivity(intent);
                break;
            case R.id.QQ:
                if(Build.VERSION.SDK_INT>=23){///QQ需要申请写入权限
                    String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
                    ActivityCompat.requestPermissions(this,mPermissionList,123);
                }else{
                    UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, authListener);
                }
                break;
        }
//    if (v.getId()==R.id.DengLu){
//
//    }else if (v.getId()==R.id.ZhuCe){
//
//    }else if (v.getId()==R.id.QQ){
//
//    }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode==123){
            UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, authListener);
        }
    }

    UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授权开始的回调
         * @param platform 平台名称
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }


        /**
         * @desc 授权成功的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param data 用户资料返回
         */
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

            Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(MainActivity.this,ThreeActivity.class);
            startActivity(intent);
            finish();
        }

        /**
         * @desc 授权失败的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

            Toast.makeText(MainActivity.this, "失败:" + t.getMessage(),                                  Toast.LENGTH_LONG).show();
        }

        /**
         * @desc 授权取消的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
        }
    };

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (buttonView.getId()==R.id.jzmm){
            SharedPreferences.Editor editor = sp.edit();
            if (!isChecked){//取消记录密码
                editor.remove("phone");//移除手机号
                editor.remove("password");//移除密码
            }
            editor.putBoolean("login",isChecked);//保存记住密码状态
            editor.commit();
        }
    }

    @Override
    public void success(User data) {
        Toast.makeText(this,data.getUsername(),Toast.LENGTH_LONG).show();
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("user",new Gson().toJson(data));
        editor.commit();
        Intent intent = new Intent(this,ThreeActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void fail(Result result) {
        Toast.makeText(this,result.getCode()+"   "+result.getMsg(),Toast.LENGTH_LONG).show();
    }
}

这是主方法


public class TwoActivity extends AppCompatActivity
implements View.OnClickListener,DataCall<User> {

    private EditText password_two,phone_two;
    private Presenter presenter = new Presenter(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
         phone_two = findViewById(R.id.phone_two);
         password_two = findViewById(R.id.password_two);
        findViewById(R.id.ZhuCe_two).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String mobile = phone_two.getText().toString();
        String pas = password_two.getText().toString();
        if (!StringUtil.isPhone(mobile)){
            Toast.makeText(this,"请输入正确手机号",Toast.LENGTH_LONG).show();
            return;
        }
        if (pas.length()<6){
            Toast.makeText(this,"密码最少6位",Toast.LENGTH_LONG).show();
            return;
        }
        presenter.requestData(mobile,pas);
    }

    @Override
    public void success(User data) {
        Toast.makeText(this,"注册成功,请登录",Toast.LENGTH_LONG).show();
        finish();
    }

    @Override
    public void fail(Result result) {
        Toast.makeText(this,result.getMsg(),Toast.LENGTH_LONG).show();
    }
}

注册层


public class ThreeActivity extends AppCompatActivity implements View.OnClickListener {

    private SharedPreferences sp;
    private ImageView image_view;

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bitmap bitmap = (Bitmap)msg.obj;
            image_view.setImageBitmap(bitmap);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_three);
        sp = XFApp.getInstance().getShare();
        image_view = findViewById(R.id.image_view);
        String struser = sp.getString("user", "");
        final User user=new Gson().fromJson(struser,User.class);
        findViewById(R.id.button_one).setOnClickListener(this);
        new Thread(new Runnable() {
            @Override
            public void run() {
                Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode(user.getUsername(), 400);
                Message message = handler.obtainMessage();
                message.obj=bitmap;
                handler.sendMessage(message);
            }
        }).start();
    }

    @Override
    public void onClick(View v) {
        XFApp.getInstance().getShare().edit().remove("user").commit();
        Intent intent=new Intent(this,MainActivity.class);
        startActivity(intent);
        finish();
    }
}

生成二维码和退出登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值