From 280bb1e94e403733fbd0c0431f3018853ac02bb0 Mon Sep 17 00:00:00 2001 From: liuyx Date: Tue, 18 Apr 2023 22:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8room=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dbnavigator.xml | 17 +++++++- .../main/java/cc/liuyx/app/LoginActivity.java | 39 +++++++++++++++---- .../java/cc/liuyx/app/RegisterActivity.java | 27 ++++++++++++- .../main/java/cc/liuyx/app/dao/UserDao.java | 22 ++++++++++- app/src/main/java/cc/liuyx/app/db/UserDB.java | 12 ++++++ .../main/java/cc/liuyx/app/entity/User.java | 23 +++++++++++ 6 files changed, 129 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/cc/liuyx/app/db/UserDB.java diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml index d9b9424..884727e 100644 --- a/.idea/dbnavigator.xml +++ b/.idea/dbnavigator.xml @@ -6,7 +6,7 @@ - + @@ -17,6 +17,21 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/java/cc/liuyx/app/LoginActivity.java b/app/src/main/java/cc/liuyx/app/LoginActivity.java index fea5365..f9a5ecc 100644 --- a/app/src/main/java/cc/liuyx/app/LoginActivity.java +++ b/app/src/main/java/cc/liuyx/app/LoginActivity.java @@ -9,16 +9,27 @@ import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import androidx.room.Room; + +import cc.liuyx.app.dao.UserDao; +import cc.liuyx.app.db.UserDB; +import cc.liuyx.app.entity.User; public class LoginActivity extends AppCompatActivity implements View.OnClickListener { private EditText usernameEdit, passwdEdit; + private static UserDB db; + private UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); + db = Room.databaseBuilder(getApplicationContext(), UserDB.class, "user") + .allowMainThreadQueries() + .build(); + usernameEdit = findViewById(R.id.login_username); passwdEdit = findViewById(R.id.login_passwd); @@ -39,22 +50,36 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList } } + @Override + protected void onStop() { + super.onStop(); + db.close(); + } + private void login() { String username = usernameEdit.getText().toString(); String passwd = passwdEdit.getText().toString(); + userDao = db.getUserDao(); + if (!username.equals("") && !passwd.equals("")) { - SharedPreferences sp = getSharedPreferences("loginStatus", MODE_PRIVATE); - String localName = sp.getString("username", null); - String localPasswd = sp.getString("passwd", null); - if (!username.equals(localName) || !passwd.equals(localPasswd)) { - Toast.makeText(LoginActivity.this, "用户名或密码错误>_<", Toast.LENGTH_SHORT).show(); + // 在数据库中查询有无,如果有,则保存其登陆状态和信息 + User user = userDao.findUserByName(username); + if (user == null) { + Toast.makeText(LoginActivity.this, "该用户还没有注册哦>_<", Toast.LENGTH_SHORT).show(); + return; + } + if (!username.equals(user.getName()) || !passwd.equals(user.getPasswd())) { + Toast.makeText(LoginActivity.this, "您输入的密码有误", Toast.LENGTH_SHORT).show(); return; } + SharedPreferences sp = getSharedPreferences("loginStatus", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putBoolean("isLoggedIn", true); - editor.putString("username", username); + editor.putString("username", user.getName()); + editor.putString("email", user.getEmail()); + editor.putString("phone", user.getPhone()); editor.apply(); Intent intent = new Intent(LoginActivity.this, MainActivity.class); @@ -63,7 +88,5 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList } else { Toast.makeText(LoginActivity.this, "请填入用户名与密码哦~", Toast.LENGTH_SHORT).show(); } - - } } \ No newline at end of file diff --git a/app/src/main/java/cc/liuyx/app/RegisterActivity.java b/app/src/main/java/cc/liuyx/app/RegisterActivity.java index ad0f5d4..a5ac700 100644 --- a/app/src/main/java/cc/liuyx/app/RegisterActivity.java +++ b/app/src/main/java/cc/liuyx/app/RegisterActivity.java @@ -10,6 +10,11 @@ import android.widget.ImageView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import androidx.room.Room; + +import cc.liuyx.app.dao.UserDao; +import cc.liuyx.app.db.UserDB; +import cc.liuyx.app.entity.User; public class RegisterActivity extends AppCompatActivity implements View.OnClickListener { @@ -20,12 +25,19 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL private String email = ""; private EditText usernameEdit, passwdEdit, passwdAgainEdit, phoneEdit, emailEdit; + private UserDao userDao; + private UserDB db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); + db = Room.databaseBuilder(getApplicationContext(), UserDB.class, "user") + .allowMainThreadQueries() + .build(); + userDao = db.getUserDao(); + // 初始化每个组件 usernameEdit = findViewById(R.id.username); passwdEdit = findViewById(R.id.passwd); @@ -45,6 +57,12 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL }); } + @Override + protected void onStop() { + super.onStop(); + db.close(); + } + @Override public void onClick(View v) { if (v.getId() == R.id.btn_register) { @@ -64,6 +82,14 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL // 判断两次密码是否相等 if (passwd.equals(passwdAgain)) { if (!username.equals("") && !passwd.equals("")) { + // 向数据库中插入新用户的数据 + // 如果用户名重复,则此次操作不被允许 + if (userDao.findUserByName(username) != null) { + Toast.makeText(RegisterActivity.this, "已经存在该用户名啦", Toast.LENGTH_SHORT).show(); + return; + } + userDao.insert(new User(username, passwd, phone, email)); + // 设置登录状态 SharedPreferences sharedPreferences = getSharedPreferences("loginStatus", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); @@ -71,7 +97,6 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL editor.putString("username", username); editor.putString("email", email); editor.putString("phone", phone); - editor.putString("passwd", passwd); editor.apply(); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/app/src/main/java/cc/liuyx/app/dao/UserDao.java b/app/src/main/java/cc/liuyx/app/dao/UserDao.java index cbe0037..5b7d8dd 100644 --- a/app/src/main/java/cc/liuyx/app/dao/UserDao.java +++ b/app/src/main/java/cc/liuyx/app/dao/UserDao.java @@ -1,10 +1,30 @@ package cc.liuyx.app.dao; import androidx.room.Dao; +import androidx.room.Delete; import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +import cc.liuyx.app.entity.User; @Dao public interface UserDao { @Insert - void insert(); + void insert(User... users); + + @Delete + void delete(User user); + + @Update + void update(User user); + + @Query("select * from user") + List selectAllUser(); + + @Query("select * from user where name = :name") + User findUserByName(String name); + } diff --git a/app/src/main/java/cc/liuyx/app/db/UserDB.java b/app/src/main/java/cc/liuyx/app/db/UserDB.java new file mode 100644 index 0000000..4f6a20e --- /dev/null +++ b/app/src/main/java/cc/liuyx/app/db/UserDB.java @@ -0,0 +1,12 @@ +package cc.liuyx.app.db; + +import androidx.room.Database; +import androidx.room.RoomDatabase; + +import cc.liuyx.app.dao.UserDao; +import cc.liuyx.app.entity.User; + +@Database(entities = User.class, version = 1, exportSchema = false) +public abstract class UserDB extends RoomDatabase { + public abstract UserDao getUserDao(); +} diff --git a/app/src/main/java/cc/liuyx/app/entity/User.java b/app/src/main/java/cc/liuyx/app/entity/User.java index 8f51de8..11ac6b2 100644 --- a/app/src/main/java/cc/liuyx/app/entity/User.java +++ b/app/src/main/java/cc/liuyx/app/entity/User.java @@ -18,6 +18,29 @@ public class User { @ColumnInfo(name = "email") private String email; + public User() { + } + + public User(String name, String passwd, String phone, String email) { + this.name = name; + this.passwd = passwd; + this.phone = phone; + this.email = email; + } + + public User(String name, String passwd) { + this.name = name; + this.passwd = passwd; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + public String getName() { return name; }