Android App中的共享首选项问题

时间:2011-08-08 17:04:04

标签: android sharedpreferences

在我的应用程序中,我有三个名为Home,SignIn和Add Page的活动。

在我的主屏幕中,我已声明共享偏好如下

   Idprefs = PreferenceManager.getDefaultSharedPreferences(this);
   int UserId = Idprefs.getInt("useridValue", 0);

如果UserId == 0我转到SignIn Activity或者转到AddPage

在我的SignIn活动中,用户必须输入名称和密码,从服务器返回xml文件中的id,我正在解析并将其存储为共享首选项。

要在其他活动中使用此值,我已将其声明如下

public static SharedPreferences Idprefs;

在我的oncreate方法中我有这个

Idprefs = PreferenceManager.getDefaultSharedPreferences(this);

来自我存储在共享偏好

中的已解析值
SharedPreferences.Editor editor = Idprefs.edit();
editor.putInt("useridValue", userid);
editor.commit();

在我的第三个活动中,我有以下

int User = SignIn.Idprefs.getInt("useridValue",0);

这里我将用户值用于其他目的。

现在问题是以上所述的所有功能在app i启动时第一次正常工作,即它会像

一样
HomeScreen--> SignIn --> AddPage

但当应用程序关闭并第二次打开时,流程如下

HomeScreen --> AddPage

现在应用程序崩溃了,我在logcat中引用了AddPage Activity中的以下行

 int User = SignIn.Idprefs.getInt("useridValue",0);

第二次不调用SignIn页面以使其崩溃。如何在其他活动中获得储值,请求帮助

2 个答案:

答案 0 :(得分:0)

您是否在活动中的super.onCreate()调用后访问共享首选项?否则,这将导致错误并导致应用程序出现故障。

答案 1 :(得分:0)

您可以通过未实例化的类(SignIn)访问首选项:

int User = SignIn.Idprefs.getInt("useridValue",0);

因此它可能是NULL

以这种方式访问​​类成员(特别是涉及上下文时)是一种不好的做法。只需在您当前的活动中实例化它们。