我使用 Room 持久性庫構建了一個充當用戶和庫存資料庫的應用程式。目前,我能夠進行查詢以查看/輸出用戶到回收站視圖,但我需要能夠使用用戶名作為查詢物件來洗掉用戶。目前我有以下。
洗掉用戶類
String usrNam = edtTxtUsrNam2.getText().toString();
// Get all users from database log
List<Users> users = LoginMenu.mainDatabase.dao().getUsers();
Log.d(LoginMenu.TAG, "Searching for " usrNam);
boolean userFound = false;
// Check for User from text entry
for (Users usr : users) {
// User is successfully found
if (usr.getName().equals(usrNam)) {
userFound = true;
break;
}
}if (!userFound) {
Toast.makeText(getBaseContext(), "User not found",
Toast.LENGTH_SHORT).show();
Log.d(LoginMenu.TAG, " User " usrNam " Not found");
edtTxtUsrNam2.getText().clear();
} else {
// Build Messagebox Confirmation
builder.setTitle("User " usrNam " found!");
builder.setMessage("Confirm user deletion?");
// Selecting yes in Alert
builder.setPositiveButton("Yes", (dialogInterface, i) -> {
// Delete User from database
Users activeUser = new Users();
activeUser.setName(usrNam);
LoginMenu.mainDatabase.dao().delUser(activeUser);
// Toast message Log
Toast.makeText(getApplicationContext(),"User " usrNam
" successfully deleted!",Toast.LENGTH_SHORT).show();
Log.d(LoginMenu.TAG,"User " usrNam " Successfully deleted");
edtTxtUsrNam2.getText().clear();
dialogInterface.dismiss();
});
// Selecting no in Alert
builder.setNegativeButton("No", (dialogInterface, i) -> dialogInterface.dismiss());
// Create Alert Dialog
AlertDialog alert = builder.create();
alert.show();
道
@androidx.room.Dao
public interface Dao {
// Add Users to Database
@Insert
void AddUsers(Users usr);
// Request all users from DB
@Query("SELECT * FROM Users")
List<Users> getUsers();
// Delete user from DB
@Delete
void delUser (Users usr);
用戶類
@Entity(tableName = "Users")
public class Users {
// Set User Entries for Database
@ColumnInfo (name = "ID")
@PrimaryKey (autoGenerate = true)
private int id;
@ColumnInfo(name = "EmployeeId")
private String employeeId;
@ColumnInfo(name = "Name")
private String name;
@ColumnInfo(name = "Password")
private String password;
@ColumnInfo(name = "DateOfBirth")
private String dateOfBirth;
@ColumnInfo(name = "ContactNumber")
private String contactNumber;
@ColumnInfo(name = "Address")
private String address;
它檢測到用戶完全沒有問題,但不會洗掉 User 物件,我對此很陌生,并且希望得到任何幫助,因為我確信它很簡單。
uj5u.com熱心網友回復:
那是因為您正在創建新用戶并且它只有“名稱”值。
Users activeUser = new Users();
activeUser.setName(usrNam); // This user is not equal what's in db.
LoginMenu.mainDatabase.dao().delUser(activeUser);
相反,當您在資料庫中回圈用戶時,如果您找到了用戶,請從那里獲取它,如下所示:
Users activeUser = new Users();
for (Users usr : users) {
// User is successfully found
if (usr.getName().equals(usrNam)) {
userFound = true;
activeUser = usr; // now we got the exact item on db
break;
}
}
現在您的函式將洗掉正確的用戶。
//Users activeUser = new Users();
//activeUser.setName(usrNam); //you don't need them anymore.
LoginMenu.mainDatabase.dao().delUser(activeUser);
uj5u.com熱心網友回復:
我將 Dao 查詢更改為:
// Delete user from DB
@Query("DELETE FROM Users WHERE name =:userId")
abstract void deleteByUserId(String userId);
以及 RemoveUsers 類下的查詢本身
// Delete User from database
LoginMenu.mainDatabase.dao().deleteByUserId(usrNam);
查詢現在按預期作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516841.html
標籤:爪哇机器人房间
上一篇:如何處理前一個物件的變化
