未调用ContentProvider中的onCreate()

时间:2013-04-20 05:19:00

标签: android android-contentprovider oncreate

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();
        }

1 个答案:

答案 0 :(得分:0)

您需要显示执行插入的代码。

很抱歉,剩下的内容并非直接针对这个问题,但我在所有关于ContentProviders的代码示例中都看到了这一点。

您不应在ContentProvider onCreate中调用database = new DatabaseSQLiteMyDB(getContext());。这是出于getiteaddatabase和getWritableDatabase的SQLiteOpenHelper文档中给出的原因:

  

与getWritableDatabase一样,此方法可能需要很长时间才能返回,   所以你不应该从应用程序主线程中调用它,包括   来自ContentProvider.onCreate()。

而是保存对SQLiteOpenHelper实例的引用,并在查询/插入/删除/更新方法中适当调用getWritableDatabase / getReadableDatabase,如果您使用的是Loaders,则会异步调用这些方法。