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运行?
根据文档,您使用的是内容提供商
在应用程序启动时,应用程序主线程上的所有已注册内容提供程序都会调用此方法
并且您尝试使用内容提供程序的方式似乎是错误的,并且您不需要手动实例化内容提供程序,一旦您通过传递URI 通过ContentResolver发出请求,系统将检查给定URI的权限和将请求传递给向权威机构注册的内容提供商.
例如
getContentResolver().delete(uri, null, null);
Run Code Online (Sandbox Code Playgroud)
uri的位置,查询的完整URI.
本教程将指导您正确的方向
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |