2014-02-26 123 views
1

我試圖讓我的SQLite數據庫在我使用單例模式Android應用程序全局訪問:Android的全球訪問SQLite數據庫

public class MySQLiteOpenHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "foo"; 
    private static final int DATABASE_VERSION = 1; 
    private static MySQLiteOpenHelper instance; 

    private MySQLiteOpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public static MySQLiteOpenHelper getInstance(Context context) { 
     if (instance == null) { 
      instance = new MySQLiteOpenHelper(context); 
     } 
     return instance; 
    } 

    public static MySQLiteOpenHelper getInstance() throws UnsupportedOperationException { 
     if (instance == null) { 
      throw new UnsupportedOperationException(); 
     } 
     return instance; 
    } 

... 

這裏的想法是,首先調用的是getInstance(Context context)通過在應用程序對象。此後,我可以使用getInstance(),因爲我無法獲得Context對象的句柄。

不過,我來脫膠當我做出初步MySQLiteOpenHelper.getInstance(getApplication())電話:

java.lang.IllegalStateException: getDatabase called recursively 
     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:204) 
     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 

任何人都可以擺脫對這裏發生了什麼任何燈光或暗示對實現我的目標更好的技術?

乾杯!

+0

只是創建'SQLiteOpenHelper'不會導致這種情況。發佈你的助手'onCreate()'代碼,你可能在那裏有'getWritableDatabase()'。 – laalto

+0

嘎!我以爲我沒有在'onCreate()'方法中犯下任何罪行,但我確實在那裏調皮搗蛋!我會爬回我的岩石下... 謝謝! – user3352488

回答

2

您發佈的代碼就好了。

java.lang.IllegalStateException: getDatabase called recursively 

這是您撥打電話時引起的,例如, getWritableDatabase()遞歸。它

一個常見原因是調用getWritableDatabase()數據庫幫手onCreate()。當getWritableDatabase()被調用且數據庫不存在時,調用onCreate()。再次調用getWritableDatabase()是一個錯誤。您應該使用傳遞給onCreate()的可寫SQLiteDatabase作爲參數。

0

你MySQLiteOpenHelper應該工作正常。

這個類是沒有問題的。