1

所以我一直在做一个从服务器接收数据的项目,例如 sessionKey。我创建了这样的getter和setter方法:

public class sEngine
{
private static String sessionKey;

public static String getSessionKey() {
        return sessionKey;
    }

    public static void setSessionKey(
            String sessionKey) {
        sEngine.sessionKey = sessionKey;
    }
}

然后我有活动 A。在这个活动 A 中,我将一个值插入到 setter 方法中。

public class A extends Activity
{
@Override
    protected void onCreate(Bundle savedInstanceState) {

sEngine.setSessionKey("Hello world")
}
}

我也有活动B。在这个活动B中,我调用getter方法

public class B extends Activity
{
    @Override
        protected void onCreate(Bundle savedInstanceState) {

            String sessionKey = sEngine.getSessionKey();
    }
}

我突然想到,Android 有时会擦除所有数据以释放一些内存,例如当我让程序空闲时间过长时,或者我使用了 Advanced Task Killer。问题是如果发生这种情况,尽管我已经在活动 A 中设置了值,但当我调用 getter 方法时,我将在活动 B 中得到 null。有什么方法可以让我维护通过 setter 方法存储的值(除了使用SharedPreference),所以尽管 Android 擦除了内存/数据,但该值仍然存在?

4

3 回答 3

5

有什么方法可以让我维护通过 setter 方法存储的值(除了使用 SharedPreference 之外),因此尽管 Android 擦除了内存/数据,但该值仍然存在?

不知道为什么你不想使用SharedPreferences,尽管它是你要求的完美候选人。当像这样简单的东西可以存储它时:

SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences(SOME_KEY, Context.MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.putString("session_key", sessionKey );

这将确保您的会话密钥始终保持存储以便于检索。除非用户清除您的应用数据。

您唯一的替代方法SharedPreferences是将sessionkey保存到Database我认为,考虑到它将执行的任务,绝对没有必要。

您还可以考虑将sessionkey写入文本文件,然后读取它以检索数据。

这两种选择SharedPreferences都真正不适合您需要的目的。我真的会敦促您重新考虑使用SharedPreferences.

于 2013-02-25T04:42:08.803 回答
0

改变

sEngine.sessionKey = sessionKey;

在你的代码中

this.sessionKey = sessionKey;

或者干脆

sessionKey = sessionKey;

使用sEngine.让人相信你的课程是静态的。它不是!

或者如果您想sEngine.在代码中的任何地方使用它,您需要将此类声明为static。在这种情况下,您只需将类声明设为静态:

public static class sEngine {
于 2013-02-25T04:47:41.510 回答
0

试试这个,在 A Activity 中声明你是非活动类。然后设置您的会话值。

sEngine mengine = new sEngine();
mengine.setSessionKey("Hello world");

并在 B 活动中获得会话价值。

sEngine mengine = new sEngine();
String str = mengine.getSessionKey();
于 2013-02-25T04:33:26.390 回答