还原后,在自定义ContentProvider中刷新/重新加载数据库引用

ssu*_*z28 8 database eclipse android

我在我的应用程序中使用ContentProvider,除了一个小问题外,一切都很好.我有一个备份和恢复功能,可以将数据库备份到SD卡上的文件,然后可以恢复这些备份文件以覆盖当前数据库.整个过程正在运行,但一旦恢复了一个旧备份文件,ContentProvider仍然保留原始数据库的引用/缓存.我似乎无法找到一种方法来刷新或重新加载ContentProvider中的数据库引用.我知道恢复有效,因为我可以使用SQLite编辑器查看数据库中的记录,当我关闭并重新打开应用程序时,它会显示正确的记录.

有人知道这样做的方法吗?有没有办法关闭并重新打开我没有看到的ContentProvider?

ptc*_*ptc 28

如果您的目标是> = API 5,您可以获得对ContentProvidervia a 的引用ContentProviderClient,并运行特定于您的实现的方法:

ContentResolver resolver = context.getContentResolver();
ContentProviderClient client = resolver.acquireContentProviderClient("myAuthority");
MyContentProvider provider = (MyContentProvider) client.getLocalContentProvider();
provider.resetDatabase();
client.release();
Run Code Online (Sandbox Code Playgroud)

将reset方法添加到您的ContentProvider实现中:

public void resetDatabase() {
    mDatabaseHelper.close();
    mDatabaseHelper = new MyDatabaseOpenHelper(context);
}
Run Code Online (Sandbox Code Playgroud)


Dev*_*red 6

你保持实际参考SQLiteDatabase您的内容提供商(类似呼吁SQLiteOpenHelper.getWritableDatabase()onCreate(),然后保持该引用)?或者您是否从每个提供程序方法中的帮助程序中获取数据库对象?

通常,如果您只保留对助手的本地引用并根据需要在每个方法中获取可写/可读数据库实例,那么此问题应该消失.如果没有,也许我们可以看一下提供商代码?

希望有帮助!