Getter和Setter在Android中返回null

Wan*_*nto 1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

sEngine.setSessionKey("Hello world")
}
}
Run Code Online (Sandbox Code Playgroud)

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

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

            String sessionKey = sEngine.getSessionKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,Android有时会擦除所有数据以释放一些内存,例如当我让程序闲置太久时,或者我使用了Advanced Task Killer.问题是,如果这些发生了,我会在空b活动当我打电话getter方法虽然我已经设置在活动A.价值有没有办法对我来说,保持通过setter方法存储的值(比其他SharedPreference)所以虽然Android擦除了内存/数据,但价值仍然存在?

Sid*_*ele 5

有没有办法让我保持通过setter方法存储的值(除了使用SharedPreference),所以虽然Android擦除了内存/数据,但值仍然存在?

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

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

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

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

你也可以考虑sessionkey到一个文本文件,然后读取它以检索数据.

两种替代品SharedPreferences都真的不适合您需要的目的.我真的会敦促你重新考虑使用SharedPreferences.

  • +1.如果要尽可能地防止数据丢失,持久存储是最安全的方法.是的,用户可以清除您的应用数据,但他们可以轻松地对应用程序进行擦除,擦除静态字符串.你也可以做云存储;) (2认同)