在 Android 的 运行 时间创建数据库
Creation of databases at run time in Android
我正在为我的应用程序使用 DataProvider
来处理 CRUD 操作。现在 DataProvider
使用 SQLiteOpenHelper
嵌套内部 class。 CRUD 操作的所有定义都在 DataProvider
本身内部定义,SQLiteOpenHelper
class 负责创建数据库,比如 abc.db 并定义两个表说 table1 和 table2。现在,当用户登录到该应用程序时,会创建数据库(如果不存在则显然会创建),并通过使用 ContentResolver
查询和 CursorLoader
加载到列表中来显示用户的数据。这部分我已经实现了。
问题出现在多用户场景中。假设用户决定注销并使用另一个帐户登录或注册一个新帐户,由于保留了先前用户的数据,因此先前的数据也会加载到 ListView
and/or 其他视图中获取数据从数据库。根据我的逻辑,这可以通过为同一设备上的每个新用户创建新的数据库实例来避免。但是由于 ContentProvider
在 Activity 的 onCreate()
之前初始化数据库,我发现这很难实现。关于如何实施它有什么想法吗?
因为我找不到其他替代方法,所以我相信维护一个 user_id
列是确保多用户可用性不受干扰的唯一方法。我已经实现了相同的功能,并使用 user_id=?
和当前登录的用户作为 user_id
参数向所有查询添加了一个额外的 WHERE
子句。在 运行 时间创建数据库的想法,即使可能,至少对于我的问题陈述来说可能不是必需的。
我正在为我的应用程序使用 DataProvider
来处理 CRUD 操作。现在 DataProvider
使用 SQLiteOpenHelper
嵌套内部 class。 CRUD 操作的所有定义都在 DataProvider
本身内部定义,SQLiteOpenHelper
class 负责创建数据库,比如 abc.db 并定义两个表说 table1 和 table2。现在,当用户登录到该应用程序时,会创建数据库(如果不存在则显然会创建),并通过使用 ContentResolver
查询和 CursorLoader
加载到列表中来显示用户的数据。这部分我已经实现了。
问题出现在多用户场景中。假设用户决定注销并使用另一个帐户登录或注册一个新帐户,由于保留了先前用户的数据,因此先前的数据也会加载到 ListView
and/or 其他视图中获取数据从数据库。根据我的逻辑,这可以通过为同一设备上的每个新用户创建新的数据库实例来避免。但是由于 ContentProvider
在 Activity 的 onCreate()
之前初始化数据库,我发现这很难实现。关于如何实施它有什么想法吗?
因为我找不到其他替代方法,所以我相信维护一个 user_id
列是确保多用户可用性不受干扰的唯一方法。我已经实现了相同的功能,并使用 user_id=?
和当前登录的用户作为 user_id
参数向所有查询添加了一个额外的 WHERE
子句。在 运行 时间创建数据库的想法,即使可能,至少对于我的问题陈述来说可能不是必需的。