【发布时间】:2018-07-07 17:20:42
【问题描述】:
我的应用程序使用一个 SQLite DB,用 SQLiteOpenHelper 和 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 为空。是的,我应该在尝试调用getUid() 之前检查user 是否不为空。但这不会使这件事起作用)
所以这似乎不是正确的方法。如何根据签名用户使用不同的数据库?我可以让内容提供者在用户通过身份验证后首先创建吗?
我也可以将所有内容保存在一个数据库中并添加一个UID 列。但这是否可以很好地保护不同用户的数据?此外,这将意味着更多的代码更改。
【问题讨论】:
标签: android android-sqlite android-contentprovider android-multiple-users