ContentProvider を拡張する userDatabase の onCreate が正しく呼び出されない
これが私のuserBatabaseコードの一部です:
public class userDatabase extends ContentProvider {
private MainDatabaseHelper mOpenHelper;
public userDatabase(){}
public static final class MainDatabaseHelper extends SQLiteOpenHelper{...}
@Override
public boolean onCreate() {
mOpenHelper = new MainDatabaseHelper(getContext());
return true;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
long id = mOpenHelper.getWritableDatabase().insert("Users", null, values);
return Uri.withAppendedPath(CONTENT_URI, "" + id);
}
...
}
私の主な活動では、次のように呼び出します。
userDatabase cpDatabase = new userDatabase();
でも電話しようとするとcpDatabase.insert(userDatabase.CONTENT_URI, values);
mOpenHelper.getWritableDatabase().insert("Users", null, values);
が呼び出されると、挿入内ですべてがクラッシュします。
それ自体でも実行できないため、それが問題であることがわかりmOpenHelper.getWritableDatabase()
ました。その後、mOpenHelper が null であることが原因であることがわかりました。
コンストラクターで mOpenHelper をインスタンス化するので、実行されていないことがわかります。ログ メッセージを呼び出すuserDatabase cpDatabase = new userDatabase();
と、userDatabase() コンストラクターは正常に実行されましたが、onCreate は実行されなかったため、mOpenHelper はインスタンス化されませんでした。
(注: これらのログ メッセージで、アプリの開始時に userDatabase のコンストラクターと onCreate が呼び出されたことに気付きました。理由や場所がわかりません。インスタンスを作成する前に、なぜこれが実行されたのかわかりません。実行されたにもかかわらず、mOpenHelper はまだ初期化されておらず、インスタンスを作成したときにコンストラクターは実行されましたが、onCreate は実行されませんでした。)
どうすれば onCreate を実行できますか?