我的应用程序使用 SQLite DB,用 aSQLiteOpenHelper
和 a包装ContentProvider
。我在应用程序中添加了登录功能,现在我希望每个用户只能看到自己的数据。我认为实现这一点的方法是让应用程序为登录到应用程序的每个用户创建一个单独的数据库,并在数据库的文件名中使用用户的 ID。
我有这个ContentProvider
:
public class MyProvider extends ContentProvider {
//...
@Override
public boolean onCreate() {
dbHelper = new MyDBHelper(getContext());
return true;
}
我有这个SQLiteOpenHelper
:
public class MyDBHelper extends SQLiteOpenHelper {
哪个有这个构造函数:
public MyDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
到目前为止,该应用程序不能拥有多个用户,因此它只有一个数据库。所以DB_NAME
总是相同的字符串。我现在尝试这样设置:
private static String UID = FirebaseAuth.getInstance().getCurrentUser().getUid();
public static final String DB_NAME = String.format("data%s.db", UID);
(如您所见,我正在使用Firebase
身份验证)
但这导致了崩溃,因为显然内容提供者是在应用程序启动时创建的,在用户进行身份验证之前。(user
空值也是如此。是的,我应该user
在尝试调用之前检查它是否为空值getUid()
。但这不会使这件事起作用)
所以这似乎不是正确的方法。如何根据签名用户使用不同的数据库?我可以在用户通过身份验证后首先创建内容提供者吗?
我也可以将所有内容保存在一个数据库中并添加一UID
列。但这是否能很好地保护不同用户的数据?此外,这将意味着更多的代码更改。