2

onCreate()方法 inContentProvider没有被调用。虽然当我单击一个按钮时,它会进入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

在清单中:

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

1 回答 1

0

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

抱歉,其余内容并非直接针对问题,但这是我在有关 ContentProviders 的代码示例中到处都看到的内容。

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

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

相反,保留对 SQLiteOpenHelper 实例的引用,并在查询/插入/删除/更新方法中酌情调用 getWritableDatabase/getReadableDatabase,如果您使用的是加载器,这些方法将被异步调用。

于 2015-10-08T09:57:30.013 回答