2012-02-08 33 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在他们的答案中指出的那样)。