Getter和Setter在Android中返回null

时间:2013-02-25 04:26:39

标签: java android

所以我一直在研究从服务器接收数据的项目,例如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。问题是如果发生这种情况,当我调用getter方法时,我会在活动B中得到null,尽管我已经在活动A中设置了值。有没有办法让我通过setter方法维护存储的值(除了使用SharedPreference)所以虽然Android会擦除内存/数据,但仍然存在值?

3 个答案:

答案 0 :(得分:5)

  

我有什么方法可以保持通过setter存储的值   方法(使用SharedPreference除外),因此值仍然是   虽然Android会擦除内存/数据吗?

不确定为什么你不想使用SharedPreferences,尽管它是你要求的完美候选者。当像这样简单的事情可以存储它时:

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

这将确保您的 sessionkey 始终保存,以便于检索。除非用户清除您的应用数据。

SharedPreferences相对的唯一选择是将会话密钥保存到Database,在我看来,考虑到它将执行的任务,绝对没有必要。

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

SharedPreferences的替代方案都不适合您需要的目的。我真的会敦促你重新考虑使用SharedPreferences

答案 1 :(得分:0)

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

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

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

sEngine mengine = new sEngine();
String str = mengine.getSessionKey();

答案 2 :(得分:0)

更改

sEngine.sessionKey = sessionKey;

在您的代码中

this.sessionKey = sessionKey;

只是

sessionKey = sessionKey;

使用sEngine.让人相信你的班级是静态的。这不是!

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

public static class sEngine {