[英]MyContentProvider.onCreate() is not being called?
扩展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);
}
...
}
在我的主要活动中,我称:
userDatabase cpDatabase = new userDatabase();
但是当我尝试调用cpDatabase.insert(userDatabase.CONTENT_URI, values);
当mOpenHelper.getWritableDatabase().insert("Users", null, values);
插入时,所有内容都会崩溃mOpenHelper.getWritableDatabase().insert("Users", null, values);
叫做。
我发现mOpenHelper.getWritableDatabase()
是问题所在,因为它甚至无法mOpenHelper.getWritableDatabase()
运行,然后我发现这是因为mOpenHelper为空。
我在构造函数中实例化了mOpenHelper,所以我认为它没有运行。 当我调用userDatabase cpDatabase = new userDatabase();
时,一些日志消息确认了这一点userDatabase cpDatabase = new userDatabase();
我的日志消息显示userDatabase()构造函数正常运行,但是onCreate从未运行,因此mOpenHelper从未实例化。
(注意:通过这些日志消息,我注意到我的应用程序启动时调用了我的userDatabase的构造函数和onCreate。我不知道为什么或在哪里。我不明白为什么在尝试创建实例之前运行了它。即使它已运行,但mOpenHelper仍未初始化,并且当我创建实例时,构造函数已运行,但onCreate却没有。)
可能会发生什么,如何使onCreate运行?
由于您使用的是内容提供程序,因此根据文档
在应用程序启动时,将为应用程序主线程上的所有注册内容提供者调用此方法。
而且您尝试使用内容提供者的方式似乎是错误的,并且,您无需手动实例化内容提供者,一旦通过ContentResolver通过传递URI发出请求,系统就会检查给定URI的权限,并将请求传递给在授权机构注册的内容提供商。
例如
getContentResolver().delete(uri, null, null);
uri在哪里,是要查询的完整URI。
本教程将指导您正确的方向
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.