【无标题】

文章描述了一个在Android应用中实现登录功能的Fragment,涉及数据库Helper类的创建、表的操作以及用户登录验证,包括账号密码和手机号登录的处理。
摘要由CSDN通过智能技术生成
package com.data.dataanasys.optionstabstudio.example.fragments;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.data.dataanasys.R;
import com.data.dataanasys.tools.DBHelper;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


public class LoginFragment extends Fragment implements View.OnClickListener{
    private DBHelper dbHelper = null;
    private static boolean isInit;

    private EditText username,password;
    private TextView switchLogin,forget;
    private Button submit,cancel;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View context = inflater.inflate(R.layout.login,container,false);
        //创建表
        dbHelper = new DBHelper();
        try {if (!LoginFragment.isInit) {
            dbHelper.createTables(context.getContext());
            dbHelper.initDatas(context.getContext());
            Log.i("TTTTT", "创建表成功");
            }
            isInit = true;
        }catch (SQLException ex){
            Log.e("LoginFragment 创建表异常",ex.getMessage());
        }


        //TODO:编写登录业务

        username= (EditText) context.findViewById(R.id.username);
        password= (EditText) context.findViewById(R.id.password);
        switchLogin= (TextView) context.findViewById(R.id.switch_login);
        forget= (TextView) context.findViewById(R.id.forget);
        submit= (Button) context.findViewById(R.id.submit);
        cancel= (Button) context.findViewById(R.id.cancel);

        submit.setOnClickListener(this);
        cancel.setOnClickListener(this);
        switchLogin.setOnClickListener(this);
        forget.setOnClickListener(this);
        return context;
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.submit:
                login(v.getContext());
                break;
            case R.id.switch_login:
                Context context=v.getContext();
                if ("账号密码不正确".equals(switchLogin.getText().toString().trim())) {
                    String usernameHint = context.getResources().getString(R.string.login_username_account);
                    String passwordHint = context.getResources().getString(R.string.login_password_account);
                    String switchLoginText = context.getResources().getString(R.string.login_switch_phone);
                    username.setHint(usernameHint);
                    password.setHint(passwordHint);
                    switchLogin.setText(switchLoginText);

                    username.setText("");
                    username.setFocusable(true);
                    username.requestFocus();
                    password.setText("");
                }else{
                    String usernameHint = context.getResources().getString(R.string.login_username_phone);
                    String passwordHint = context.getResources().getString(R.string.login_password_phone);
                    String switchLoginText = context.getResources().getString(R.string.login_switch_account);
                    username.setHint(usernameHint);
                    password.setHint(passwordHint);
                    switchLogin.setText(switchLoginText);

                    username.setText("");
                    username.setFocusable(true);
                    username.requestFocus();
                    password.setText("");
                }
                break;
        }
    }
    private  void login(Context context){
        //1.当用户不存在(仅当用户以手机号登陆时),则创建之后直接登录
        String switchLoginStr=switchLogin.getText().toString().trim();
        if ("使用账号密码登录".equals(switchLoginStr)){
            //手机号登录,判断手机号码是否存在
            if (isPhoneExist(context) > 0){
                //手机号码存在,判断手机号码是否正确
                String phone=username.getText().toString().trim();
                String phonePSW=password.getText().toString().trim();
                if (isLogin(context,phone,phonePSW,'0')){
                    Toast.makeText(context,"登录成功",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(context,"手机号或密码不正确",Toast.LENGTH_LONG).show();
                }
            }else{
                String phone=username.getText().toString().trim();
                String phonePSW=password.getText().toString().trim();
                boolean flag=addPhoneIfNotExist(context,phone,phonePSW);
                if (!flag){
                    Toast.makeText(context,"手机号添加失败",Toast.LENGTH_LONG).show();
                }else{
                    //TODO:直接登录

                }
            }
        }else{
            //账号密码登录
            if (isUserExist(context)){
                String phone=username.getText().toString().trim();
                String phonePSW=password.getText().toString().trim();
                if (isLogin(context,phone,phonePSW,'1')){
                    //TODO:直接登录
                    Toast.makeText(context,"登录成功",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(context,"账号或密码不正确·",Toast.LENGTH_LONG).show();
                }
            }else{
                Toast.makeText(context,"账号不存在,第一次请使用手机号码登录",Toast.LENGTH_LONG).show();
                //页面变更
                String usernameHint=context.getResources().getString(R.string.login_username_phone);
                String passwordHint=context.getResources().getString(R.string.login_password_phone);
                String switchLoginText=context.getResources().getString(R.string.login_switch_account);
                username.setHint(usernameHint);
                password.setHint(passwordHint);
                switchLogin.setText(switchLoginText);

                username.setText("");
                username.setFocusable(true);
                username.requestFocus();
                password.setText("");
            }

        }
        //2.用户存在,判断用户名和密码
    }
    private int isPhoneExist(Context context){
        Map<String,Object>queryParams = new HashMap<>();
        queryParams.put("table","login");
        queryParams.put("columns",new String[]{"count(*)"});
        queryParams.put("selection","PHONE=? AND STATE=1");
        //获取手机号
        String usernameVal=username.getText().toString().trim();
        queryParams.put("selectionArgs",new String[]{usernameVal});
        Cursor isExist=dbHelper.selData(context,queryParams);
        isExist.moveToFirst();
        int isExistInt=isExist.getInt(0);
        if (null!=isExist)
            isExist.close();
        return isExistInt;
    }
    private boolean addPhoneIfNotExist(Context context,String phone,String phonePSW){
        ContentValues contentValues=new ContentValues();
        contentValues.put("PHONE",phone);
        contentValues.put("PHONE_PASSWORD",phonePSW);
        contentValues.put("STATE","1");
        DateFormat df=new SimpleDateFormat("yyyyMMdd");
        Date now=new Date(System.currentTimeMillis());
        contentValues.put("CREATETIME",df.format(now));
        contentValues.put("STATE_UPDATE_TIME",df.format(now));
        //生成账号ID
        while(true){
            //生成20位UUID
            String uuid=gennerateUUID();
            Map<String,Object> queryParams=new HashMap<>();
            queryParams.put("table","login");
            queryParams.put("columns",new String[]{"count(*)"});
            queryParams.put("selection","USERNAME=?");
            queryParams.put("selectionArgs",new String[]{uuid});
            Cursor c=dbHelper.selData(context,queryParams);
            c.moveToFirst();
            int count =c.getInt(0);
            if (null!=c)
                c.close();
            if (count <= 0){
                contentValues.put("USERNAME",uuid);
                break;
            }
        }
        boolean flag=dbHelper.addData(context,"login",contentValues,null);
        if (flag)
            return true;
        return false;
    }
    private boolean isLogin(Context context,String zh,String mm,char dlfx){
        Map<String,Object>queryParams = new HashMap<>();
        queryParams.put("table","login");
        queryParams.put("columns",new String[]{"count(*)"});
        switch (dlfx){
            case '0':
                //手机登录
                queryParams.put("selection","PHONE=? AND PHONE_PASSWORD=?");
                break;
            case '1':
                queryParams.put("selection","USERNAME=? AND PHONE_PASSWORD=?");
                break;
        }
        queryParams.put("selectionArgs",new String[]{zh,mm});
        Cursor isExist=dbHelper.selData(context,queryParams);
        isExist.moveToFirst();
        int isExistInt=isExist.getInt(0);
        if (null!=isExist)
            isExist.close();
        if (isExistInt>0)
            return true;
        return false;
    }
    //生成20位UUID
    public String gennerateUUID(){
        String uuid= UUID.randomUUID().toString().replaceAll("-","");
        //截尾后并查询,截取20位,第二个参数时截取最大下标,小于第二个参数
        uuid=uuid.substring(0,20);
        Log.i("UUUUUUUUU",uuid);
        return uuid;
    }
    private boolean isUserExist(Context context){
        Map<String,Object>queryParams = new HashMap<>();
        queryParams.put("table","login");
        queryParams.put("columns",new String[]{"count(*)"});
        queryParams.put("selection","USERNAME=? AND STATE=1");
        String usernameVal=username.getText().toString().trim();
        queryParams.put("selectionArgs",new String[]{usernameVal});
        Cursor isExist=dbHelper.selData(context,queryParams);
        isExist.moveToFirst();
        int isExistInt=isExist.getInt(0);
        if (null!=isExist)
            isExist.close();
        if (isExistInt>0)
            return true;
        return false;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值