繁体   English   中英

Getter和Setter在Android中返回null

[英]Getter and Setter return null in 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时。 问题是如果发生这些情况,尽管我已经在活动A中设置了值,但我在调用getter方法时在活动B中将得到null。是否有任何方法可以保持通过setter方法存储的值(除了使用SharedPreference),因此尽管Android会擦除内存/数据,该值仍会存在吗?

我有什么办法可以通过setter方法(不是使用SharedPreference)来维护存储的值,因此尽管Android会擦除内存/数据,但该值仍会存在?

不知道为什么您不希望使用SharedPreferences ,尽管它是您的理想选择。 当像这样简单的东西可以存储它时:

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

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

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

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

两种SharedPreferences的替代方案都不适合您需要的目的。 我真的希望您重新考虑使用SharedPreferences

尝试此操作,在“活动”中声明您的非活动类。 然后设置您的会话值。

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

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

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

更改

sEngine.sessionKey = sessionKey;

在您的代码中

this.sessionKey = sessionKey;

简单地

sessionKey = sessionKey;

使用sEngine. 让人们相信您的课堂是静态的。

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

public static class sEngine {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM