2

我从 Web 服务器userName中获取某些数据,例如输入。Activity_1然后我想在Activity_2

所以我做了这个用户名Public Static并像这样使用Activity_2

Activity_1.userName

但是当我进入Activity_2press Home Button在 5 分钟后重新打开应用程序时,就Activity_1.userName变成Null了这样Activity_1 data is destroyed。我得到NullPointerException

如何以简单的方式解决这个问题。

我只是举了一个 userName 的例子,但实际上它的一些其他数据每天都在变化,比如“每日新闻”

许多人会建议删除public static该用户名并将其发送为:

Intent.putExtra("user_name", userName);

但这和我正在做的不一样。我的意思是即使这样我也会做NullPointerException对吗??

4

4 回答 4

2

意图已保存,因此正确答案是使用 putExtra。当您的活动需要重新实例化时,它将使用意图再次创建。

于 2012-09-01T10:01:11.010 回答
2

有两种方法可以做到这一点。

  1. 始终确保 Activity1 是应用程序中的起始 Activity。我的意思是,如果用户关闭应用程序并重新启动它,应用程序应该从 Activity1 中重新获取数据。然后只去Activity2。另请注意,您可以使用AsyncTask在 Activity2 本身中从 Web 获取数据。

  2. 将来自 Activity1 的数据保存在SharedPreferences中,并且在 Activity2 中始终使用 SharedPreferences 来读取值。

于 2012-09-01T10:09:10.000 回答
2

正如 swayam 所建议的那样,我建议您选择数据库或共享首选项,尤其是共享首选项最适合您的场景;

您可以使用如下内容:

放在:

SharedPreferences sharedPreferences = getSharedPreferences("PREFS_READ",
                Context.MODE_WORLD_READABLE);
        Editor prefsPrivateEditor = sharedPreferences.edit();
        prefsPrivateEditor.putString("yourkey", userName);
prefsPrivateEditor.commit();

要得到:

SharedPreferences sharedPreferences;
        Context otherAppsContext = null;
        try {
            otherAppsContext = getApplication().createPackageContext(
                    "your.package.name", 0);
        } catch (NameNotFoundException e) {
            Toast.makeText(Email.this, e.toString(), Toast.LENGTH_LONG).show();
        }
        sharedPreferences = otherAppsContext.getSharedPreferences("PREFS_READ",
                Context.MODE_WORLD_WRITEABLE);

        String getusername = sharedPreferences.getString("yourkey","default_value");
于 2012-09-01T10:26:52.233 回答
2

您可以向此事件添加一个动作并仅在该动作存在时捕获该事件......

当然,您可以永久保存数据 - SQLite 数据库或 SharedPreferences

于 2012-09-01T10:02:59.507 回答