如何解决房间数据库:更新列表时,它可以正常工作!但是当我重新打开应用程序时,它显示了旧数据
Dao
@androidx.room.Dao
公共界面Dao {
@Insert
public void addUser(User user);
@Query("SELECT * FROM users")
public List<User> getUsers();
@Update
public void updateUser(User user);
@Delete
public void deleteUser(User user);
}
适配器类
holder.updateUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mctx);
LayoutInflater inflater = LayoutInflater.from(mctx);
View view1 = inflater.inflate(R.layout.dialog_update_user,null);
builder.setView(view1);
final EditText etFNAme = view1.findViewById(R.id.editTextFirstNameUser);
final EditText etLName = view1.findViewById(R.id.editTextLastNameUser);
etFNAme.setText(user.getFirstName());
etLName.setText(user.getLastName());
final AlertDialog dialog = builder.create();
dialog.show();
view1.findViewById(R.id.updateUserBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String fname = etFNAme.getText().toString().trim();
String lname = etLName.getText().toString().trim();
MainActivity.database.dao().updateUser(user);
holder.textViewFirst.setText(fname);
holder.textViewLast.setText(lname);
Toast.makeText(mctx,"User Updated",Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
}
});
我试图创建一个新列表,并试图调用Dao()。getUser(),但它没有用 再次,当我更新特定数据时,它起作用了!但是当重新打开该应用程序时,它显示的是旧数据而不是经过重复处理的数据?
主要活动
public class MainActivity extends AppCompatActivity {
EditText etFirstname,etLastname;
Button btnSave;
public static AppDatabase database;
RecyclerView recyclerView;
UserAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
database = Room.databaseBuilder(getApplicationContext(),AppDatabase.class,"userdb").allowMainThreadQueries().build();
etFirstname = findViewById(R.id.editTextFirstName);
etLastname = findViewById(R.id.editTextLastName);
btnSave = findViewById(R.id.saveBtn);
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String fName = etFirstname.getText().toString();
String lName = etLastname.getText().toString();
if (fName.isEmpty() || lName.isEmpty()) {
Toast.makeText(MainActivity.this,"please enter data!",Toast.LENGTH_SHORT).show();
} else {
User user = new User();
user.setFirstName(fName);
user.setLastName(lName);
database.dao().addUser(user);
Toast.makeText(MainActivity.this,"User Added!",Toast.LENGTH_SHORT).show();
adapter.add(user);
}
}
});
adapter = new UserAdapter(this,database.dao().getUsers());
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
recyclerView.setAdapter(adapter);
}
}
这是我将适配器设置为mainactivity以添加用户的方式,但是我想通过单击位于适配器类中设置的对话框中的更新按钮来更新用户
解决方法
看起来您实际上并未在此处更新用户:
String fname = etFNAme.getText().toString().trim();
String lname = etLName.getText().toString().trim();
MainActivity.database.dao().updateUser(user);
holder.textViewFirst.setText(fname);
holder.textViewLast.setText(lname);
您不见了:
user.setFirstName(fName);
user.setLastName(lName);
在MainActivity.database.dao().updateUser(user)
之前
用户似乎已经更新了,而实际上您只是用新的姓氏和姓氏更新了TextViews。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。