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);
}
}
## 结果

然后我们可以看一下数据库文件和密码记录的文件。
首先我们可以重启一下虚拟机,防止生成的文件没刷新出来…
### 总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。




网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
VZrL-1714442473414)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**