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;
}
}
【无标题】
最新推荐文章于 2024-09-15 09:47:04 发布
文章描述了一个在Android应用中实现登录功能的Fragment,涉及数据库Helper类的创建、表的操作以及用户登录验证,包括账号密码和手机号登录的处理。
摘要由CSDN通过智能技术生成