こんにちは、Playstoreからの更新を行うときに呼び出されるアプリケーションを拡張するクラスです。 私の問題は、私のアプリケーションクラスのonCreate関数でSQLiteDatabaseを初期化したことです。私は以下のエラーでやると私のアプリのクラッシュをアップグレードする場合Android Application UpgradeはApplicationを拡張するClassを呼び出しますか?
のjava.lang.NullPointerException:仮想メソッド「ブールandroid.database.sqlite.SQLiteDatabase.isOpenを(呼び出そうと)
SQLiteDatabaseを意味していますUPDATEで初期化されません。
いずれかのアイデア???我々はより多くのです
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.database.sqlite.SQLiteDatabase.isOpen()' on a null object reference
at com.cellulant.consumerapp.db.DBAdapter.getSqliteDatabase(DBAdapter.java:518)
at com.cellulant.consumerapp.fragments.PaymentsFragment.onCreateView(PaymentsFragment.java:113)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1235)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1083)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1609)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:465)
at android.view.View.measure(View.java:17923)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1079)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:465)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:465)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:17923)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:465)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2733)
at android.view.View.measure(View.java:17923)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2461)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1463)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1687)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1341)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6700)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:572)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
DB Apdater
パブリッククラスDBAdapterがSQLHelper {
private CustomerTable customerTable;
private ProfilesTable profilesTable;
/**
* @param context Application Context
* @param dbName Database name
* @param dbVersion database version
*/
public DBAdapter(Context context, final String dbName, final int dbVersion) {
super(context, dbName, null, dbVersion);
customerTable = new CustomerTable();
billsTable = new BillsTable();
}
/***
* Create individual table needed in database
*
* @param sqlDB Database
*/
private void createInitialTables(SQLiteDatabase sqlDB) {
try {
customerTable.createTable(sqlDB);
billsTable.createTable(sqlDB);
} catch (Exception e) {
LogUtils.showException(e);
}
}
@Override
public void onCreate(SQLiteDatabase sqlDB) {
createInitialTables(sqlDB);
super.onCreate(sqlDB);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
/**
* This method is responsible for closing the database connection.
*
* @param db Database
*/
public void close(SQLiteDatabase db) {
super.close();
//Check if there is any open connection before closing.
if (db.isOpen()) {
db.close();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
if (oldVersion < 21) {
boolean tableSMSTemplateColumnIsDefault = StringUtils.checkIfColumnExists(db, SMSTemplateTable.class.getSimpleName(), SMSTemplateMap.PARSE_TYPE);
if (!tableSMSTemplateColumnIsDefault) {
db.execSQL(ALTER_SMS_TEMPLATES_PARSE_TYPE);
}
boolean tableMerchantColumnIsDefault = StringUtils.checkIfColumnExists(db, MerchantPayersTable.class.getSimpleName(), MerchantPayersMap.IS_DEFAULT);
if (!tableMerchantColumnIsDefault) {
db.execSQL(ALTER_MERCHANT_PAYER_IS_DEFAULT);
}
}
}
@Override
public SQLiteDatabase getSqliteDatabase() {
if (!super.getSQLiteDatabase().isOpen()) {
open();
}
return super.getSQLiteDatabase();
}
/*
* Getter Methods
*/
public CustomerTable getCustomerTable() {
return customerTable;
}
public ProfilesTable getProfilesTable() {
return profilesTable;
}
}
コードなしでは答えにくいです。より詳細なstacktraceとアプリケーションクラスを投稿してください –
上記のYves DelermはStacktraceです – kubs
ありがとうございました。私はあなたのデータベースがアプリケーションクラスでどのように初期化されてDBAdapterで取得されたかを確認するのに役立つかもしれないと思います –