0

数据库 '+data+user+0+com_retailistan_salesflo+databases+sf_db_db' 的连接池在 8.0060005 秒内无法授予与标志 0x1 的线程 15791 (arch_disk_io_2) 的连接。连接数:4 个活动,0 个空闲,0 个可用。

 fun getInstance(mCtx: Context): DatabaseClient? {

        return mInstance ?: synchronized(this) {
          val instance = DatabaseClient(mCtx)
            mInstance = instance
            Log.d("DatabaseClient", "getInstance calledt")
          // return instance
          instance
      }

在里面 {

    appDatabase = Room.databaseBuilder(mCtx.applicationContext,
            AppDatabase::class.java, DATABASE_NAME_ROOM)
            .addCallback(rdc)
            .build()

}

getInstance(this)!!.appDatabase

4

1 回答 1

0

您似乎正在使用多个连接(房间数据库的实例)。使用单例(单个共享连接)可能会解决问题。

因此,不要使用以下内容:-

TheDatabase db = Room.databaseBuilder(this,TheDatabase.class,"mydatabase").build();

随着 TheDatabase 是这样的: -

@Database(entities = {State.class,Location.class,School.class,TimerDesign.class,IntervalDesign.class,Table1.class},exportSchema = false,version = 1)
abstract class TheDatabase extends RoomDatabase {
    abstract AllDao getAllDao();
}

在整个应用程序中。您可以考虑使用:-

@Database(entities = {MyTableEntity.class},exportSchema = false,version = 1)
abstract class TheDatabase extends RoomDatabase {
    abstract AllDao getAllDao();
    
    private static volatile TheDatabase instance;
    public static TheDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(
                    context,
                    TheDatabase.class,
                    "mydatabase"
            ).build();
        }
        return instance;
    }
}

随着

db = TheDatabase.getInstance(this);

因此,您可以在整个应用程序中获得单一连接,而不是额外的连接。

于 2021-06-14T00:46:54.927 回答