破坏数据库 - android生命周期

时间:2013-01-29 20:25:57

标签: android android-sqlite android-lifecycle

您好我试图找出一种方法来在每次应用程序启动时通过从后台返回或在关闭后重新打开来销毁我的数据库。问题是,当我第一次尝试运行我的应用程序时,我得到一个null并且我的应用程序崩溃了。

我的申请 用户通过登录屏幕提示我创建数据库,移动到另一个活动以执行查询。从该活动,用户无法返回登录,并且只能进入电话主屏幕。当我将进入主屏幕并重新打开应用程序时,我想要清除数据库并启动,就像我第一次使用该应用程序一样。 我知道这对于一个应用程序来说实际上并不实用,但这只是为了学习。

我尝试在db.close()context.deleteDatabase(db.getPath());中执行onResumeonRestart,但这总是会破坏我的应用程序。我也尝试检查'db.getPath()!= null',但这也无济于事。

谢谢

3 个答案:

答案 0 :(得分:1)

既然你知道这不是最实用的数据库使用方法,我想我不会因此而烦你。

你想要做的不是在Resume()或Restart()期间调用方法来删除数据库内容,你实际上想要通过Stop()调用它。

您要使用的方法是

db.delete(String table, string whereClause, String [] whereArgs);

传递要删除的表的名称,即“user_food_database”,在您的情况下,由于您要删除所有行,因此 null 的whereclause,以及whereArgs的null。

这是官方文件:

“删除数据库中行的便捷方法。

参数 表要删除的表 whereClause在删除时应用可选的WHERE子句。传递null将删除所有行。

返回 传入whereClause时受影响的行数,否则为0。删除所有行并获取计数传递“1”作为whereClause。 “

您也可以致电:

deleteDatabase(File pathToDatabase)

如果您的数据库中有多个表,但每次重新创建数据库本身都很昂贵,并且只删除内容可能会更好。

答案 1 :(得分:0)

我建议你只是擦除数据库,即删除所有数据(甚至删除表)。这不是您问题的直接答案,但具有相同的效果。

答案 2 :(得分:0)

只需删除open()的{​​{1}}方法中的所有表格,然后通过调用SQLiteDatabaseHelper重新创建表格。当然,只有在每个应用程序启动时只打开一次数据库时才能正常工作。