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

挿入を実行するコードを表示する必要があります。

申し訳ありませんが、これの残りの部分は質問を直接対象としていませんが、ContentProvider に関するコード サンプルのいたるところで見たものです。

database = new DatabaseSQLiteMyDB(getContext());ContentProvider onCreate を呼び出さないでください。これは、getReadableDatabase および getWritableDatabase の SQLiteOpenHelper ドキュメントに記載されている理由によるものです。

getWritableDatabase と同様に、このメソッドは戻るまでに時間がかかる場合があるため、ContentProvider.onCreate() を含め、アプリケーションのメイン スレッドから呼び出すべきではありません。

代わりに、SQLiteOpenHelper インスタンスへの参照を保持し、ローダーを使用している場合は非同期で呼び出される query/insert/delete/update メソッドで必要に応じて getWritableDatabase/getReadableDatabase を呼び出します。

于 2015-10-08T09:57:30.013 に答える