【发布时间】:2021-09-30 08:48:48
【问题描述】:
android 官方文档建议在 onStop() 中保存数据。但问题是当我将数据保存在 onStop 时,数据在某些情况下会被多次保存。例如:“当我最小化活动时,返回活动,然后再次最小化活动”,这使得数据保存多次,因为每次活动最小化都会调用 onStop。我希望数据只保存一次,因为多次保存数据只会对数据库造成垃圾邮件。
这是 onStop() 方法
@Override
protected void onStop() {
// call the superclass method first
super.onStop();
// save the note's current draft, because the activity is stopping
// and we want to be sure the current note progress isn't lost.
saveNote();
MainActivity.showNoteOnRecyclerView(AddNoteActivity.this);
}
保存笔记方法:
public void saveNote() {
try {
//puts notes,title data from the UI elements to the model class
if (title.getText().length() > 0 || note.getText().length() > 0) {
NoteModel noteModel = new NoteModel(title.getText().toString(), note.getText().toString());
//saves the noteModel data to the database
DatabaseHandler databaseHandler = new DatabaseHandler(AddNoteActivity.this);
databaseHandler.insertData(noteModel);
Toast.makeText(this, "Note Saved", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
updateNote 方法:
public void updateNote() {
try {
//puts notes,title data from the UI elements to the model class and updates it in the database
if (title.getText().length() > 0 || note.getText().length() > 0) {
NoteModel noteModel = new NoteModel(title.getText().toString(), note.getText().toString());
noteModel.setId(selectedId);
// puts the updated data to the database
DatabaseHandler databaseHandler = new DatabaseHandler(EditNoteActivity.this);
databaseHandler.updateData(noteModel);
}
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】:
-
更改
saveNote()的代码,以便它在第一次调用时将行插入到表中,并为任何后续调用更新行。 -
你的 saveNote() 方法是如何工作的?保存数据时,您需要考虑新项目与要更新的项目。
-
@forpas 你能详细说明一下吗
-
@Eenvincible 我已将 saveNote() 代码添加到问题中
-
可靠的代码设计将引导您创建像
insertOrUpdate()这样的单个函数,然后在其中执行帮助您判断项目是否已存在于数据库中的机制;这将比使用两种几乎完全相同的方法更容易。
标签: java android sqlite android-activity android-lifecycle