【发布时间】:2020-10-08 02:55:53
【问题描述】:
我正在开发一个应用程序,该应用程序在收到付款后将交易保存在 SQLite 数据库中。 一旦交易被批准,它就会被插入到数据库中,并且在该用户显示批准之后。 当我得到结果时,我表示批准 sqlitedatabase.insert() 方法,并检查它是否返回行号。
public static boolean insert(String tableName, SQLiteDatabase sqLiteDatabase, ContentValues contentValues){
long rowId = sqLiteDatabase.insert(tableName, null, contentValues);
return rowId != -1;
}
问题是,当向用户显示批准时,我通过弹出电池关闭设备(我正在测试电池盒)并且 当我重新启动设备时,我看到数据库中没有插入记录。这让我觉得 SQLite 在返回行 ID 后异步插入记录。
我正在使用 AsyncTask,我在 doInBackground 中插入,并在 AsyncTask 的 onPostExecute() 中显示用户批准。
我的问题是,有什么方法可以确保在我调用 insert 方法时插入记录,还是我在这里做错了什么?
【问题讨论】:
-
使用 Worker's(WorkManager) 可以为您解决这个问题,并确保在给定条件下完成任务。
-
@Anmol 我认为这与此无关,我的任务已经完成并调用 onPostExecute。
-
你能在插入后尝试 database.setTransactionSuccessful() - 将当前事务标记为成功。它可以保证记录插入。
-
是否插入了记录?我的意思是,如果你不弹出电池,什么时候会出现记录?
-
直到事务没有结束,命令可能不会被硬写。尝试开始事务,执行插入,关闭事务,然后取出电池。
标签: android sqlite android-asynctask android-sqlite