This Android application on Google使用以下方法刷新数据库:
public void resetDbConnection() {
this.cleanup();
this.db =
SQLiteDatabase.openDatabase(
"/data/data/com.totsp.bookworm/databases/bookworm.db",
null, SQLiteDatabase.OPEN_READWRITE);
}
我没有构建这个应用程序,我不确定会发生什么。 我试图让这个想法在我自己的应用程序中工作,但数据似乎被视图缓存,并且应用程序继续显示已替换的数据库中的数据,即使在我调用cleanup()并重新打开数据库之后。我必须终止并重新启动活动才能看到新数据。
我试图在我的TabHost视图上调用 invalidate ,它几乎包含所有内容。我认为视图会重绘并刷新其基础数据,但这也没有预期的结果。
我最终以编程方式重新启动活动,这有效,但这似乎是一个极端的措施。还有更好的方法吗?
答案 0 :(得分:1)
至少在概念上与Pentium10达成一致。
应用程序正在使用Cursor
来显示其数据。 Android中的Cursor
类似于ODBC中的客户端游标,因为它是查询结果集所代表的所有数据的缓存副本。
现在,处理数据库内容更改的常规方法是在requery()
上调用Cursor
。这将通过CursorAdapter
附加ListViews
或其他AdapterViews
来改变其变化。
在您的情况下,我不完全确定它会起作用,因为您正在关闭,替换和重新打开数据库。这不应该在数据AFAIK上打开Cursor
。因此,在您的情况下,您需要关闭Cursor
,执行数据库随机播放,然后再次运行查询以在新数据库上获得新的Cursor
。