2011-07-05 41 views
0

存儲共享對象我有一個類:所有活動

public class DbAdapter { 
    private DbHelper dbHelper; 
    private SQLiteDatabase db; 
    private final Context context; 
    ... 
} 

,我希望有它的所有活動提供。該類提供對我的sqlite數據庫的訪問。

什麼是最優雅和乾淨的方式來做到這一點?我想過在每個活動中創建對象(它應該「連接」我到同一個數據庫,對吧?)。

+0

還沒有真的有時間來清理它或作爲答案粘貼它,但看看我的DatabaseHelper http://pastebin.com/Bgi9dDkP,否則我會推薦一個單身人士 – Blundell

回答

2

您可以實現它擴展應用程序類。谷歌有這樣說的:

對於那些誰需要 維護全球應用程序狀態的基類。您 可以通過 自己的機制,在 AndroidManifest.xml中的 標籤指定其名字,這將導致該類是 實例化時,你爲你的應用程序/包的過程 是創建 。

通常不需要子類 應用程序。在大多數情況下,靜態的 單身可以以更模塊化的方式提供相同的功能。 如果你單身,需要一個全球性的 上下文(例如註冊 廣播接收機),該函數 檢索它可以給出一個上下文 內部使用 Context.getApplicationContext()時 首先構建了單。

我已經做到了我自己是這樣的:

public class App extends Application { 

    private DbHelper dbHelper; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     dbHelper = new DbHelper(this); 

    } 

    public SQLiteDatabase getDatabase(){ 
     return dbHelper.getWritableDatabase(); 
    } 

    @Override 
    public void onTerminate() { 
     super.onTerminate(); 
     dbHelper.close(); 
    } 
} 

然後你只需訪問它調用getApplicationContext.getDatabase()

0

你可以看看Singleton Pattern,它給了一個機會讓一個類只有一個對象被創建,並且使得這個對象可以從任何地方訪問。希望這可以幫助。

+1

我的單身人士答案:http:///goo.gl/OhRVk :-D – Blundell

0

我認爲最好的實現方法是使用ServiceService將繼續參考DbAdapter,您的所有活動都將連接到Service。當活動連接到服務時,它會保持對它的引用,並且每次需要db訪問時,它都會使用它來獲取DbAdapter。使用這種方法你可以控制你的數據庫連接。如果沒有任何活動連接到服務,比沒有人使用數據庫連接,你可以釋放它。

+0

你能說更多嗎?我找不到任何寫得很好的方法。當服務已經啓動時,我現在不會如何連接到另一項活動的服務。 – BartoszCichecki

+0

您可以先閱讀有關Android服務的文檔。之後,您可以查看默認音樂播放器源代碼http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=樹。請特別注意MediaPlaybackService以及活動如何連接到它。如果你想學點東西,不要只看一步一步的教程,試着去了解你在做什麼。 –

+0

我檢查瞭如何做到這一點通過以下主題:http://stackoverflow.com/questions/3433883/creating-a-service-to-share-database-connection-between-all-activities-in-android,我得到同樣的錯誤(真是一個驚喜)。你有什麼想法可以糾正它嗎? – BartoszCichecki

0

看一看ContentProviders。它們用於訪問數據。不管所有關於鏈接中「在應用程序之間共享數據」的重點,它們都不必公開 - 您可以將它們用作訪問應用程序中數據的集中方式。

'Writing Your Own ContentProvider'上的此博客條目顯示了一些用於設置在一個應用程序內工作的ContentProvider的代碼。