java.lang.IllegalStateException: attempt to re-open an already-closed object: or Attempt to reopen an already-closed object sqlitedatabase or Room attempt to re-open an already closed database.

Problem:-

The problem is that you are doing a long or large Database operation in Database than that connect frequently to the database.

My Case problem:-

I was getting java.lang.IllegalStateException: attempt to re-open an already-closed object:---
in this code below. I also Insert Data and creating Table all at the same time.

Problem code:-
private void create_database() {
    Thread thread = new Thread(() -> {
        main_db = 
              openOrCreateDatabase(ClsGlobal.Database_Name, 
                MODE_PRIVATE, 
                             null);
        // In this createCityMaster i am also inserting city 
        //name's.
        createCityMaster();
    // In this createStateMasteri am also inserting State 
      //    name's.
        createStateMaster();
        createSizeMaster();
        createUnitMaster();
        createCustomerMaster();
        createEmailLogs();
        createInventoryDetail();
        createInventoryMaster();

        createPaymentMaster();
        createPurchaseMaster();
        createPurchaseDetail();
        createCommonLogsMaster();
        createOrder_Sequence();

        if (main_db.isOpen()){

            main_db.close();
        }
    });

    thread.start();


}

Solution:-

1) Use Transaction for long Database operation.

    Solution code:-
private void create_database() {
    Thread thread = new Thread(() -> {
        main_db = 
              openOrCreateDatabase(ClsGlobal.Database_Name, 
                MODE_PRIVATE, 
                             null);

          main_db.beginTransaction();

        // In this createCityMaster i am also inserting city 
        //name's.
        createCityMaster();
    // In this createStateMasteri am also inserting State 
      //    name's.
        createStateMaster();
        createSizeMaster();
        createUnitMaster();
        createCustomerMaster();
        createEmailLogs();
        createInventoryDetail();
        createInventoryMaster();

        createPaymentMaster();
        createPurchaseMaster();
        createPurchaseDetail();
        createCommonLogsMaster();
        createOrder_Sequence();

        if (main_db.isOpen()){
            main_db.setTransactionSuccessful();
            main_db.endTransaction();
            main_db.close();
        }
    });

    thread.start();


}

Reference:-
1) https://medium.com/@JasonWyatt/squeezing-performance-from-sqlite-insertions-971aff98eef2


//------------------------------------------- End ------------------------------------------------//

Result:-

java.lang.illegalstateexception attempt to reopen an already-closed object sqlitedatabase

attempt to re-open an already-closed object: sqlitequery:

android room migration

room illegalstateexception attempt to re open an already closed object

drop room database

room database migration kotlin

room database fallback to destructive migration

room migration medium

attempt to re open an already closed object sqlitedatabase android room

attempt to re-open an already-closed object sqlitedatabase room

attempt to re-open an already-closed object room

attempt to re-open an already-closed object sqlitedatabase migration

android room attempt to re-open an already-closed object

attempt to re-open an already-closed object room migration

java lang illegalstateexception room cannot verify the data integrity

room migration medium

attempt to re open an already closed object sqlitedatabase android room

attempt to re-open an already-closed object room

attempt to re-open an already-closed object sqlitedatabase room

android room migration add column

android room migration add table

android room migration didn't properly handle

android room migration drop table

android room migration rename column

room migration example

android room database migration

android room migration create table

attempt to re-open an already-closed object: sqlitequery:

room illegalstateexception attempt to re open an already closed object

android room migration

android room rename column

migrate to room

room migration medium

drop room database

room allow destructive migration





Comments

Popular posts from this blog

Error:java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:240) at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:215) at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:143) at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:78) at com.google.android.material.chip.ChipDrawable.loadFromAttributes(ChipDrawable.java:359) at com.google.android.material.chip.ChipDrawable.createFromAttributes(ChipDrawable.java:292) at com.google.android.material.chip.Chip.(Chip.java:193) at com.google.android.material.chip.Chip.(Chip.java:186) at com.google.android.material.chip.Chip.(Chip.java:182) at com.demo.nspl.restaurantlite.Navigation_Drawer.SalesFragment.getFilterChip(SalesFragment.java:158) at com.demo.nspl.restaurantlite.Navigation_Drawer.SalesFragment.lambda$onCreateView$0(SalesFragment.java:71) at com.demo.nspl.restaurantlite.Navigation_Drawer.-$$Lambda$SalesFragment$KCm-iiczjdYbpiNmaNw12gtFOoQ.onClick(lambda) at android.view.View.performClick(View.java:5268) at android.view.View$PerformClick.run(View.java:21550) at android.os.Handler.handleCallback(Handler.java:822) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5811) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:681)

Configuration 'androidTestCompile' is obsolete and has been replaced with 'androidTestImplementation' and 'androidTestApi'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html Configuration 'testCompile' is obsolete and has been replaced with 'testImplementation' and 'testApi'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html Configuration 'testApi' is obsolete and has been replaced with 'testImplementation'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html