【问题标题】:Shared Preference issue in Android AppAndroid 应用程序中的共享偏好问题
【发布时间】:2011-08-08 17:04:04
【问题描述】:

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

在我的主屏幕中,我已声明共享首选项如下

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

如果 UserId ==0 我去登录活动,否则去 AddPage

在我的登录活动中,用户必须输入用户名和密码,我从服务器返回一个 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);

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

现在的问题是上述所有功能在我启动应用程序时第一次正常工作,即它会像

HomeScreen--> SignIn --> AddPage

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

HomeScreen --> AddPage

现在应用程序崩溃了,我记录它指的是 AddPage Activity 中的以下行

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

第二次登录页面没有被调用,所以它会崩溃。我如何在其他活动中获得储值,请帮助我

【问题讨论】:

  • 你能粘贴 DDMS 日志吗?

标签: android sharedpreferences


【解决方案1】:

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

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

因此它可能是NULL

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多