onCreate()
中的 ContentProvider
方法未被调用。虽然当我点击一个按钮时,它会进入insert()
方法并返回java.lang.NullPointerException
。在onCreate()
方法中,我只有
@Override
public boolean onCreate() {
Log.v(TAG,"Inside create provider");
database = new DatabaseSQLiteMyDB(getContext());
return false;
}
记录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
in Manifest:
<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();
}
答案 0 :(得分:0)
您需要显示执行插入的代码。
很抱歉,剩下的内容并非直接针对这个问题,但我在所有关于ContentProviders的代码示例中都看到了这一点。
您不应在ContentProvider onCreate中调用database = new DatabaseSQLiteMyDB(getContext());
。这是出于getiteaddatabase和getWritableDatabase的SQLiteOpenHelper文档中给出的原因:
与getWritableDatabase一样,此方法可能需要很长时间才能返回, 所以你不应该从应用程序主线程中调用它,包括 来自ContentProvider.onCreate()。
而是保存对SQLiteOpenHelper实例的引用,并在查询/插入/删除/更新方法中适当调用getWritableDatabase / getReadableDatabase,如果您使用的是Loaders,则会异步调用这些方法。