Android移动应用开发之登录用户密码记住及创建数据库存储查询用户名密码_移动开发登录

android:layout_height=“wrap_content”
android:text=“创建数据库”/>

<Button

android:id=“@+id/register”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:text=“注册” />
<Button
android:id=“@+id/login”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:text=“登录” />


### main.xml


就是一个简单的登录成功界面的布局



<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”>

<TextView

android:id=“@+id/textView3”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“欢迎光临!”
android:textSize=“50sp”
tools:layout_editor_absoluteX=“131dp”
tools:layout_editor_absoluteY=“62dp” />
</androidx.constraintlayout.widget.ConstraintLayout>


### MainActivity


内容结构应该比较清晰,按钮绑定各自对应的事件。


稍微解释一下部分代码:



Cursor cursor = database.rawQuery(
“select * from userTb where uname = ?”, new String[]{userName});


表明查询语句,查询到的内容在cursor中,其中?的位置用userName这个字符串来表示,简单来说就是让sql语句写起来方便一点的写法。



String String_upwd = cursor.getString(cursor.getColumnIndex(“upwd”));


表明获取查询内容中的upwd字段的内容。



package icy.hunter;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity{
private CheckBox cb;
private EditText uname;
private EditText upwd;
private static final String SP_INFO = “myuser”;
private static final String USER_ID = “UserId”;
private static final String USERPWD = “UserPwd”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    this.uname = findViewById(R.id.uname);
    this.upwd = findViewById(R.id.upwd);
    this.cb = findViewById(R.id.cb);
    Button bt_create = findViewById(R.id.createdb);
    Button bt_register = findViewById(R.id.register);
    Button bt_login = findViewById(R.id.login);

    // 记录保存数据情况
    checkIfRemember();

// 创建数据库
bt_create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(“data/data/icy.hunter/user.db”, null);
String sql = “create table userTb(uid integer primary key autoincrement, uname text, upwd text)”;
db.execSQL(sql);
Toast.makeText(MainActivity.this, “创建数据库以及表成功!”, Toast.LENGTH_LONG).show();
}
});

    //插入数据库
    bt_register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("data/data/icy.hunter/user.db", null);
            String userName = uname.getText().toString().trim();
            String userPass = upwd.getText().toString().trim();
            if(userName.equals("")||userPass.equals("")){
                Toast.makeText(MainActivity.this, "用户名或者密码为空,请重新输入!", Toast.LENGTH_LONG).show();
            }else{
                String sql = "insert into userTb(uname, upwd) values('"+userName+"', '"+userPass+"')";
                db.execSQL(sql);
                Toast.makeText(MainActivity.this, "注册用户成功!", Toast.LENGTH_LONG).show();
            }
        }
    });


    bt_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String userName = uname.getText().toString().trim();
            String userPass = upwd.getText().toString().trim();

            SQLiteDatabase database = SQLiteDatabase.openDatabase("data/data/icy.hunter/user.db", null,
                    SQLiteDatabase.OPEN_READONLY);
            Cursor cursor = database.rawQuery(
                    "select \* from userTb where uname = ?", new String[]{userName});
            int success = 0;
            while (cursor.moveToNext()) {
                String String\_upwd = cursor.getString(cursor.getColumnIndex("upwd"));
                if(userPass.equals(String\_upwd)){
                    success = 1;
                    Toast.makeText(MainActivity.this, userName+"用户登录成功!", Toast.LENGTH_LONG).show();
                    Intent it = new Intent(MainActivity.this, Main.class);
                    startActivity(it);
                }
            }
            if(success == 0){
                Toast.makeText(MainActivity.this, userName+"用户名或密码错误或用户不存在", Toast.LENGTH_LONG).show();
            }
        }
    });
}

//存数据
public void rememberMe(String uid, String pwd){
    SharedPreferences sp = getSharedPreferences(SP_INFO, MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString(USER_ID, uid);
    editor.putString(USERPWD, pwd);
    editor.commit();
}
//读数据
public void checkIfRemember(){
    SharedPreferences sp = getSharedPreferences(SP_INFO, MODE_PRIVATE);
    String uidStr = sp.getString(USER_ID, null);
    String pwdStr = sp.getString(USERPWD, null);
    if(uidStr != null && pwdStr != null){
        uname.setText(uidStr);
        upwd.setText(pwdStr);
        cb.setChecked(true);
    }
}

@Override
protected void onStop() {
    super.onStop();
        String uidStr = upwd.getText().toString().trim();
        String pwdStr = uname.getText().toString().trim();
        if(cb.isChecked()){
            rememberMe(uidStr, pwdStr);
        }
}

}


### Main


为了跳转而设定的activity。



package icy.hunter;

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class Main extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}


## 结果


![在这里插入图片描述](https://img-blog.csdnimg.cn/7666880c648f48a2beb8b0a9816d2b44.gif)


然后我们可以看一下数据库文件和密码记录的文件。


首先我们可以重启一下虚拟机,防止生成的文件没刷新出来…



### 总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

![2020面试真题解析](https://img-blog.csdnimg.cn/img_convert/2ef1954c0a700a660cd46de983e85c60.webp?x-oss-process=image/format,png)
![腾讯面试真题解析](https://img-blog.csdnimg.cn/img_convert/b6bdfab3790dc4886835df0bf5e3135b.webp?x-oss-process=image/format,png)

![阿里巴巴面试真题解析](https://img-blog.csdnimg.cn/img_convert/d1a2d47bf2cd300980bf6793dab82804.webp?x-oss-process=image/format,png)

![字节跳动面试真题解析](https://img-blog.csdnimg.cn/img_convert/5dd93772a978b3e77937536db18e81d8.webp?x-oss-process=image/format,png)
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

![](https://img-blog.csdnimg.cn/img_convert/ddedac4cecc0e8ec2c67dff704fb022a.webp?x-oss-process=image/format,png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

VZrL-1714442473414)]




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值