我的應用程序使用兩個數據庫。爲了處理這些數據庫,我創建了兩個DatabaseHelper
類,比如說類X
和類Y
。在Android中使用多個數據庫助手ormLite
我使用各自的getHelper()
方法來獲取所需的數據庫幫助程序。
但是,當最初的助手是X
,我需要Y
,我用這個下面的代碼:
OpenHelperManager.releaseHelper();
dbHelper = OpenHelperManager.getHelper(context, Y.class)
而且我得到以下異常:
java.lang.IllegalStateException: Helper class was class X but is trying to be reset to class Y
我知道,在OrmLite我們可以使用1個數據庫連接的助手的單個實例,我不認爲我違反了該規則。任何人都可以在這裏幫忙嗎?
如果您查看類_OpenHelperManager_,您會發現getHelper()方法阻止您使用_OrmLiteSqliteOpenHelper_擴展的兩個_DatabaseHelper_類。怎麼會這樣?第一次調用'getHelper()'時,它會調用'innerSetHelperClass()',以便在靜態字段中引用用作第二個參數的_DatabaseHelper_類(您的'Y.class')。所以下次你調用它時,它會檢測你是否試圖調用'getHelper()'傳遞一個不同於你第一次使用的_DatabaseHelper_類的類。 –
對不起,我忘了補充說調用'OpenHelperManager.release()'或'OpenHelperManager.releaseHelper()'不會重置這個靜態字段的值。 'OpenHelperManager.setOpenHelperClass(DifferentHelper.class)'也不會,因爲它也調用'innerSetHelperClass()',這是防止存儲前_DatabaseHelper_類的靜態字段的值一旦被設置就被更改的方法。 –