Android实现自动登录的技巧:数据库存储 (android 数据库 自动登录)
随着手机的普及,人们已经离不开手机了。手机APP成为人们生活中必不可少的工具之一。其中,很多APP都需要用户进行登录才能使用,比如微信、QQ、支付宝等等。然而,频繁的登录操作可能会让用户感到烦躁,而自动登录的功能就成为了很多用户的需求之一。
那么,如何实现自动登录呢?在Android平台下,我们可以使用数据库存储来实现这一功能。下面是具体实现方法。
一、创建数据库和表
在Android中,我们可以使用SQLite数据库进行数据存储。所以,首先需要创建一个SQLiteOpenHelper类,继承自SQLiteOpenHelper类,并实现onCreate()和onUpgrade()方法。在onCreate()方法中,我们可以创建数据库表和字段,代码如下:
public class DBHelper extends SQLiteOpenHelper{
private static final int VERSION=1;
private static final String DB_NAME=”user_db”;
private static final String TABLE_NAME=”user”;
private static final String ID=”_id”;
private static final String NAME=”name”;
private static final String PASSWORD=”password”;
private static final String AUTO_LOGIN=”auto_login”;
public DBHelper(Context context){
super(context,DB_NAME,null,VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql=”create table “+TABLE_NAME+”(“+ID+” integer primary key autoincrement,”+NAME+” varchar(20),”+PASSWORD+” varchar(20),”+AUTO_LOGIN+” bit)”;
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
}
}
在上面的代码中,我们创建了一个名为user_db的数据库,并创建了一个名为user的表,并添加了四个字段:_id(id自增长字段)、name(用户名)、password(密码)和auto_login(是否自动登录)。
二、存储用户信息
用户登录成功后,我们需要将用户信息存储到数据库中。此时,需要先将用户输入的用户名和密码进行加密处理,然后再将它们存储到数据库中。
加密处理可以使用MD5算法进行,需要在代码中额外添加一个MD5Utils类,代码如下:
public class MD5Utils {
public static String md5(String input) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance(“MD5”);
digest.update(input.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuilder hexString = new StringBuilder();
for (int i = 0; i
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length()
h = “0” + h;
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return “”;
}
}
在加密的基础上,我们可以在登录成功时将用户信息存储到数据库中,代码如下:
public class LoginActivity extends AppCompatActivity {
private EditText et_userName;
private EditText et_password;
private CheckBox cb_autoLogin;
private Button btn_login;
private DBHelper dbHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
et_userName=findViewById(R.id.et_username);
et_password=findViewById(R.id.et_password);
cb_autoLogin=findViewById(R.id.cb_autologin);
btn_login=findViewById(R.id.btn_login);
dbHelper=new DBHelper(this);
db=dbHelper.getWritableDatabase();
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name=et_userName.getText().toString();
String password=MD5Utils.md5(et_password.getText().toString());
ContentValues values=new ContentValues();
values.put(“name”,name);
values.put(“password”,password);
if(cb_autoLogin.isChecked()){
values.put(“auto_login”,true);
}else{
values.put(“auto_login”,false);
}
db.insert(“user”,null,values);
Intent intent=new Intent(LoginActivity.this,MnActivity.class);
startActivity(intent);
finish();
}
});
}
}
在上面的代码中,我们使用ContentValues对象保存要存储的用户信息,然后使用insert()方法将信息存储到数据库中,并在Intent跳转到MnActivity界面。
三、自动登录的实现
当用户再次打开APP时,我们需要通过数据库中的数据来判断是否需要自动登录。而自动登录的实现也很简单,只需要在MnActivity的onCreate()方法中判断用户是否需要自动登录,代码如下:
public class MnActivity extends AppCompatActivity {
private DBHelper dbHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
dbHelper=new DBHelper(this);
db=dbHelper.getWritableDatabase();
Cursor cursor=db.rawQuery(“select * from user where auto_login=?”,new String[]{“true”});
if(cursor.moveToFirst()){
String name=cursor.getString(cursor.getColumnIndex(“name”));
String password=cursor.getString(cursor.getColumnIndex(“password”));
Intent intent=new Intent(MnActivity.this,AutoLoginActivity.class);
intent.putExtra(“name”,name);
intent.putExtra(“password”,password);
startActivity(intent);
finish();
}
cursor.close();
}
}
在MnActivity的onCreate过程中,我们首先调用DBHelper的getWritableDatabase()方法获取到SQLite数据库,然后使用rawQuery()方法查询数据库中auto_login字段为true的记录。如果有记录,说明需要自动登录,此时我们可以直接跳转到AutoLoginActivity界面,并将用户名和密码传递过去。
AutoLoginActivity界面的代码如下:
public class AutoLoginActivity extends AppCompatActivity {
private TextView tv_userName;
private TextView tv_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_autologin);
tv_userName=findViewById(R.id.tv_username);
tv_password=findViewById(R.id.tv_password);
String name=getIntent().getStringExtra(“name”);
String password=getIntent().getStringExtra(“password”);
tv_userName.setText(name);
tv_password.setText(password);
}
}
在上面的代码中,我们可以通过getIntent()方法获取到上一个Activity传递过来的参数,并显示在TextView上。
本文介绍了Android实现自动登录的技巧,通过使用SQLite数据库进行存储来实现自动登录功能。使用此方法不仅可以方便用户的操作,还可以提高用户体验,从而增加用户粘性。如果需要实现自动登录功能,可以参考本文中的代码实现。