2012-10-18 81 views
0

在Activity_A后不发生变化,我有:的Android:共享偏好值甚至犯

public static final String PREFS_NAME = "MyPrefsFile"; 

SharedPreference settings = getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putBoolean("hasLoggedIn", true); 
editor.commit(); 

在Activity_B我有:

//changing the previously added **city** value 
SharedPreferences settings = getSharedPreferences(Activity_A.PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString("city", myCity); 
editor.commit(); 

在Activity_C我有:

SharedPreferences settings = getSharedPreferences(Activity_A.PREFS_NAME, 0); 
String city = settings.getString("city", "default"); 
//here i am getting the previous value of **city**, not the updated 1 from Activity_B 

但是,一旦我重新启动应用程序,它会给出正确的值。

我在做什么错了?

谢谢

+0

在Activity_A中,您还没有提交过,所以如果没有完成,请执行该操作。除此之外,每件事看起来都很好。 – Scorpion

+0

你想在'Activity C'中改变吗? – Praveenkumar

+0

只有在活动B中,您正在设置城市。因此,您将在活动C中获得该值。 –

回答

2

在你想要显示的值Activity C,当你得到从SharedPreferences价值?

你应该得到的onResume方法我想是因为如果你这样做的onCreate方法没有变化会在那里,如果你共同回到Activity CSharedPreferences值。

这是因为只有Activity第一次创建时才会调用onCreate方法。当您从Activity C回退(离开)时,它将在backstack上继续,并在稍后使用onRestartonResume进行恢复。这意味着onCreate方法不会再被调用。

因此,我建议你在onResume方法中从SharedPreferences获得。

活动lifecylce:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

我是正确的?

Rolf

+0

You应该发布一些更多的代码:) –

+0

是的,它的工作。非常感谢。 –