java - MyContentProvider.onCreate() 没有被调用?

标签 java android database android-contentprovider sqliteopenhelper

未正确调用扩展 ContentProvider 的我的 userDatabase 的 onCreate

这是我的一些 userBatabase 代码:

public class userDatabase extends ContentProvider {

    private MainDatabaseHelper mOpenHelper;

    public userDatabase(){}

    public static final class MainDatabaseHelper extends SQLiteOpenHelper{...}

    @Override
    public boolean onCreate() {
        mOpenHelper = new MainDatabaseHelper(getContext());     
        return true;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        long id = mOpenHelper.getWritableDatabase().insert("Users", null, values);
        return Uri.withAppendedPath(CONTENT_URI, "" + id);
    }

    ...
}

在我的主要 Activity 中,我调用:

userDatabase cpDatabase = new userDatabase();

但是当我尝试调用 cpDatabase.insert(userDatabase.CONTENT_URI, values);

调用 mOpenHelper.getWritableDatabase().insert("Users", null, values); 时,insert 内的一切都崩溃了。

我发现 mOpenHelper.getWritableDatabase() 是问题所在,因为它甚至无法单独运行,然后我发现这是因为 mOpenHelper 为空。

我在构造函数中实例化了 mOpenHelper,所以我认为它没有运行。一些日志消息证实了这一点,当我调用 userDatabase cpDatabase = new userDatabase(); 我的日志消息显示 userDatabase() 构造函数正常运行,但 onCreate 从未运行,因此 mOpenHelper 从未被实例化.

(注意:通过这些日志消息,我注意到当我的应用程序启动时,我的 userDatabase 的构造函数和 onCreate 被调用。我不知道为什么或在哪里。我不明白为什么在我尝试创建一个实例。即使它运行了,mOpenHelper 仍然没有初始化,当我创建一个实例时,构造函数运行但 onCreate 没有。)

可能会发生什么,我怎样才能让我的 onCreate 运行?

最佳答案

由于您使用的是内容提供商,根据 documentation

This method is called for all registered content providers on the application main thread at application launch time

而且您尝试使用内容提供者的方式似乎是错误的,而且, 一旦你通过 ContentResolver 发出请求,你不需要手动实例化内容提供者。通过传递 URI,系统检查给定 URI 的权限,并将请求传递给在权限中注册的内容提供者。

例如

getContentResolver().delete(uri, null, null);

uri在哪里,要查询的完整URI。

This教程将指导您正确的方向

关于java - MyContentProvider.onCreate() 没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649430/

相关文章:

java - 如何初始化实例成员?

java - 数组中变量之间的距离

android - 无法在 mac 上的 react-native-navigation 中连接到开发服务器

java - 电影数据库查询

mysql - Grafana使用mysql数据库做图报错1064

java - Bigdecimal 转字符串

Android shell 获取前台应用包名

android - 6个字母后自动在EditText中添加字符

php - mysql_select_db() 导致我的 $_POST 变量为空

java.lang.NullPointerException : Attempt to invoke virtual method 'onMemberDareLoaded(java.lang.String)' on a null object reference