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数据库进行存储来实现自动登录功能。使用此方法不仅可以方便用户的操作,还可以提高用户体验,从而增加用户粘性。如果需要实现自动登录功能,可以参考本文中的代码实现。

相关问题拓展阅读:

android怎么链接数据库mysql

有点多请耐心看完。

希望能帮助你,还请及时采纳谢谢。

一.前言

android连接数据库的方式有两种,之一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。第二种方式是android直接连接数据库,这种方式非常耗手机内存,而且容易被

反编译

造成

安全隐患

,所以在实际项目中不推荐使用。

二.准备工作

1.加载外部jar包

在Android工程中要使用jdbc的话,要导入jdbc的外部jar包,因为在Java的jdk中并没有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,网络上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的时候发现不兼容,所以下载了比较新版本的,jar包可以去官网下载,也可以去百度,有很多前人们上传的。

2.导入jar包的方式

方式一:

可以在项目的build.gradle文件中直接添加如下语句导入

compile files(‘libs/mysql-connector-java-5.1.18-bin.jar’)

方式二:下载jar包复制到项目的libs目录下,然后右键复制过来的jar包Add as libs

三.建立数据库连接

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_jdbc);

new Thread(runnable).start();

}

Handler myHandler=new Handler(){

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

super.handleMessage(msg);

Bundle data=new Bundle();

data=msg.getData();

//System.out.println(“id:”+data.get(“id”).toString()); //输出第n行,列名为“id”的值

Log.e(“TAG”,”id:”+data.get(“id”).toString());

TextView tv= (TextView) findViewById(R.id.jdbc);

//System.out.println(“content:”+data.get(“content”).toString());

}

};

Runnable runnable=new Runnable() {

private Connection con = null;

@Override

public void run() {

// TODO Auto-generated method stub

try {

Class.forName(“com.mysql.jdbc.Driver”);

//引用代码此处需要修改,address为数据IP,Port为

端口号

,DBName为数据名称,UserName为数据库登录账户,Password为数据库登录密码

con =

//DriverManager.getConnection(“jdbc: “root”, “”);

DriverManager.getConnection(“jdbc:

“,

UserName,Password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

testConnection(con); //测试数据库连接

} catch (java.sql.SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void testConnection(Connection con1) throws java.sql.SQLException {

try {

String sql = “select * from ecs_users”;//查询表名为“oner_alarm”的所有内容

Statement stmt = con1.createStatement();//创建Statement

ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor

//ResultSet最初指向之一行

Bundle bundle=new Bundle();

while (rs.next()) {

bundle.clear();

bundle.putString(“id”,rs.getString(“userid”));

//bundle.putString(“content”,rs.getString(“content”));

Message msg=new Message();

msg.setData(bundle);

myHandler.sendMessage(msg);

}

rs.close();

stmt.close();

} catch (SQLException e) {

} finally {

if (con1 != null)

try {

con1.close();

} catch (SQLException e) {}

}

}

};

注意:

在Android4.0之后,不允许在主

线程

中进行比较耗时的操作(连接数据库就属于比较耗时的操作),需要开一个新的线程来处理这种耗时的操作,没新线程时,一直就是程序直接退出,开了一个新线程处理直接,就没问题了。

当然,连接数据库是需要网络的,千万别忘了添加访问网络权限:

四.bu

1.导入的jar包一定要正确

2.连接数据库一定要开启新线程

3.数据库的IP一定要是可以ping通的,局域网地址手机是访问不了的

4.数据库所在的服务器是否开了防火墙,阻止了访问

————————————————

版权声明:本文为CSDN博主「shuaiyou_comon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

关于android 数据库 自动登录的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Android实现自动登录的技巧:数据库存储 (android 数据库 自动登录)