[英]onCreate() in ContentProvider is not being called
ContentProvider
onCreate()
方法没有被调用。 虽然当我单击按钮时,它进入insert()
方法内部并返回java.lang.NullPointerException
。 在onCreate()
方法中,我只有
@Override
public boolean onCreate() {
Log.v(TAG,"Inside create provider");
database = new DatabaseSQLiteMyDB(getContext());
return false;
}
Log CAT显示:
04-20 01:23:00.543: V/CLICKED(1607): CLICKED
04-20 01:23:00.553: V/Provider(1607): inside insert
04-20 01:23:00.573: V/database(1607): created
04-20 01:23:00.573: E/pkg.OnPut_ClickListener(1607): java.lang.NullPointerException
04-20 01:23:00.583: V/pkg.OnPut_ClickListener(1607): In exception code
在清单中:
<provider android:name="somepkg.CustomContentProvider"
android:authorities="somepkg.provider" />
在点击创建URI时:
{
myURI=buildUri("content", "somepkg.provider");
this.putNo=putNo;
mContentValues = initTestValues();
}
private Uri buildUri(String scheme, String authority) {
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.authority(authority);
uriBuilder.scheme(scheme);
return uriBuilder.build();
}
您需要在执行插入的地方显示代码。
抱歉,其余内容并非直接针对该问题,但这是我在有关ContentProviders的代码示例中到处都看到的。
您不应调用database = new DatabaseSQLiteMyDB(getContext());
在ContentProvider onCreate中。 这是由于SQLiteOpenHelper文档中针对getReadableDatabase和getWritableDatabase给出的原因:
与getWritableDatabase一样,此方法可能需要很长时间才能返回,因此您不应从应用程序主线程(包括从ContentProvider.onCreate()中)调用它。
而是保留对SQLiteOpenHelper实例的引用,并在查询/插入/删除/更新方法中适当地调用getWritableDatabase / getReadableDatabase,如果使用Loader,则该方法将被异步调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.