MyContentProvider.onCreate()没有被调用?

Mar*_*rio 4 java database android 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);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

在我的主要活动中,我打电话:

userDatabase cpDatabase = new userDatabase();
Run Code Online (Sandbox Code Playgroud)

但是当我试着打电话的时候 cpDatabase.insert(userDatabase.CONTENT_URI, values);

mOpenHelper.getWritableDatabase().insert("Users", null, values);调用时,插入内部的所有内容都会崩溃.

我发现这mOpenHelper.getWritableDatabase()是问题,因为它甚至不会自己运行,然后我发现这是因为mOpenHelper为null.

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

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

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

cod*_*aff 6

根据文档,您使用的是内容提供商

在应用程序启动时,应用程序主线程上的所有已注册内容提供程序都会调用此方法

并且您尝试使用内容提供程序的方式似乎是错误的,并且您不需要手动实例化内容提供程序,一旦您通过传递URI 通过ContentResolver发出请求,系统将检查给定URI的权限和将请求传递给向权威机构注册的内容提供商.

例如

getContentResolver().delete(uri, null, null);
Run Code Online (Sandbox Code Playgroud)

uri的位置,查询的完整URI.

教程将指导您正确的方向