2012-02-08 60 views
0

我有兩個活動在我的應用程序中說A & B.活動A需要B存儲的數據(當前共享首選項)。但要查詢活動A中的數據,我需要B的上下文。但是,活動A沒有任何方法來獲取活動B的上下文(根據應用程序流程)。有沒有辦法或使用數據庫將是一個更好的選擇?SharedPreferences或數據庫?

回答

5

如果您要存儲在SharedPreferences中,那麼您不需要Activity B的上下文。活動A的上下文可以訪問應用程序的SharedPreferences,因爲它們對應用程序是「全局」的。

代碼示例

ActivityA.this.getSharedPreferences("SOMETHING", MODE_PRIVATE); 

至於如果你需要一個數據庫定義,你沒有說什麼數據要存儲。因此不可能說出來。

4

爲什麼你需要活動A的上下文?您可以在每個活動中使用getApplicationContext().getSharedPreferences()來存儲/檢索SharedPreferences。

此外,根據要存儲的數據,您可能需要考慮使用Intent將數據從活動A傳遞到活動B.例如,要從A啓動活動B,您可以使用類似下面的內容:

Intent i = new Intent(getApplicationContext(), ActivityB.class); 
i.putExtra("someIntData",1234); 
i.putExtra("someStringData","yourdata"); 
startActivity(i); 

然後無論你需要ActivityB的數據,你可以這樣做:

int yourIntData = getIntent().getIntExtra("someIntData",0); 
String yourStringData = getIntent().getStringExtra("someStringData"); 

這將是一個速度更快,因爲你不必擊中SharedPreferences或數據庫文件系統。

2

您可以使用

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 

有任何活動,它會返回一個SharedPreferences對象綁定到你的應用程序的軟件包名稱,不管是哪個活動你的作爲上下文傳遞。

或者,您可以爲您的共享首選項選擇一個名稱,並將其傳遞給活動的getSharedPreferences方法(正如Sam_D和Graham在他們的答案中指出的那樣)。