Android会议室:无法授予与线程的连接(数据库的连接池)

时间:2018-07-09 21:03:45

标签: android sqlite android-room

我使用Room库使用以下代码来处理sqldatabase。我曾多次使用downloadCustomers方法,但突然间我在mDatabase.repoCustomer()。deleteCustomers()中收到以下消息:

消息:

数据库的连接池无法授予与线程室android的连接

这只发生过一次,我擦除了模拟器,因此可以再次运行它。 我在论坛上读到“ 交易可能被线程打开”,但是Room库会自动处理此类情况。

有什么想法吗?

仿真器:带有Google Play的仿真器API 27(不是Google API)

要考虑的事情:有时,当我在Google上运行应用时,会发生奇怪的事情,例如e.x同时运行带有2个实例的应用。但是我不想做个简单的假设。

谢谢。

public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase sInstance;

@VisibleForTesting
public static final String DATABASE_NAME = "Database_db";

public abstract CustomerDao repoCustomer();


public static AppDatabase getInstance(Context context) {

    if (sInstance == null) {
        synchronized (AppDatabase.class) {
            if (sInstance == null) {
                sInstance = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME).build();

            }
        }
    }
    return sInstance;
}


public void downloadCustomers(final String table){

        executors.diskIO().execute(new Runnable() {
            @Override
            public void run() {
                mDatabase.repoCustomer().deleteCustomers();

                if (mDatabase.repoCustomer().getAllCustomers().size() == 0) {
                    makeHttpRequest();
                 }
             });
        }  
}


@Dao
public interface CustomerDao {

    @Transaction @Query("SELECT * FROM Customer")
    LiveData<List<Customer>> getAllCustomersLive();

    @Transaction @Query("SELECT * FROM Customer")
    List<Customer> getAllCustomers();

    @Transaction @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertCustomers(List<Customer> Customers);

    @Query("DELETE FROM Customer")
    int deleteCustomers();
}

0 个答案:

没有答案