Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的Getter和Setter返回null_Java_Android - Fatal编程技术网

Java Android中的Getter和Setter返回null

Java Android中的Getter和Setter返回null,java,android,Java,Android,所以我一直在做一个从服务器接收数据的项目,比如sessionKey。我创建了如下getter和setter方法: public class sEngine { private static String sessionKey; public static String getSessionKey() { return sessionKey; } public static void setSessionKey( String sessi

所以我一直在做一个从服务器接收数据的项目,比如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有时会清除所有数据以释放一些内存,例如,当我让程序闲置太长时间,或者我使用了高级任务杀手。问题是,如果发生这种情况,尽管我在活动A中设置了值,但当我调用getter方法时,活动B中的值将为null。除了使用SharedReference之外,我是否有其他方法来维护通过setter方法存储的值,以便在安卓清除内存/数据的情况下,该值仍然存在?

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

sEngine mengine = new sEngine();
mengine.setSessionKey("Hello world");
并在B活动中获取会话值

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

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

sEngine mengine = new sEngine();
mengine.setSessionKey("Hello world");
并在B活动中获取会话值

sEngine mengine = new sEngine();
String str = mengine.getSessionKey();
我有没有办法维护通过setter存储的值 方法而不是使用SharedReference,因此该值仍为 安卓会清除内存/数据吗

不知道为什么您不想使用SharedReferences,尽管它是您需求中的最佳候选。当像这样简单的东西可以存储它时:

SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences(SOME_KEY, Context.MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.putString("session_key", sessionKey );
这将确保您的会话密钥始终保持存储状态,以便于检索。除非用户清除了您的应用程序数据,否则

与SharedReference相反,您唯一的选择是将sessionkey保存到数据库中,考虑到它将执行的任务,我认为这是绝对不必要的

您还可以考虑将SeScess键写入文本文件,然后读取它以恢复数据。

SharedReference的两种替代方案都确实不适合您需要它的目的。我真的希望你们重新考虑使用SharedReference

我有没有办法维护通过setter存储的值 方法而不是使用SharedReference,因此该值仍为 安卓会清除内存/数据吗

不知道为什么您不想使用SharedReferences,尽管它是您需求中的最佳候选。当像这样简单的东西可以存储它时:

SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences(SOME_KEY, Context.MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.putString("session_key", sessionKey );
这将确保您的会话密钥始终保持存储状态,以便于检索。除非用户清除了您的应用程序数据,否则

与SharedReference相反,您唯一的选择是将sessionkey保存到数据库中,考虑到它将执行的任务,我认为这是绝对不必要的

您还可以考虑将SeScess键写入文本文件,然后读取它以恢复数据。

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

更改

sEngine.sessionKey = sessionKey;
在你的代码中

this.sessionKey = sessionKey;
或者干脆

使用sEngine。让人相信你的类是静态的,而不是静态的

或者如果你想用这个引擎。在代码中的任何地方,都需要将此类声明为静态。在这种情况下,只需将类声明为静态:

public static class sEngine {
改变

sEngine.sessionKey = sessionKey;
在你的代码中

this.sessionKey = sessionKey;
或者干脆

使用sEngine。让人相信你的类是静态的,而不是静态的

或者如果你想用这个引擎。在代码中的任何地方,都需要将此类声明为静态。在这种情况下,只需将类声明为静态:

public static class sEngine {

你为什么不想使用SharedReferences?它易于使用,不受此问题的影响,是一种普遍接受的方法。让您的sEngine成为singleton。希望对您有所帮助。您也可以将数据保存在bundle中为什么不使用持久存储?SharedPrefers或SQLite数据库是这类东西最常见的。为什么不想使用SharedPreferences呢?它易于使用,不受此问题的影响,是一种普遍接受的方法。让您的sEngine成为singleton。希望对您有所帮助。您也可以将数据保存在bundle中为什么不使用持久存储?SharedPrefs或SQLite数据库是这类东西最常见的。您正在创建新实例。如果字符串仍然是静态的,则会出现相同的问题。如果字符串不是静态的,您将创建两个单独的对象,每个对象使用不同的sessionKey。单例方法可能会起作用,但在内存不足的情况下,它也很可能会被终止,重新创建时,字符串将再次为null。不要使用静态值。公共字符串sessionKey足够了,您如何期望两个单独的实例具有相同的sessionKey?根据我的评论:如果字符串不是静态的,那么您将创建两个单独的对象,每个对象使用不同的sessionKey。您正在创建新实例。如果字符串仍然是静态的,则
有同样的问题。如果字符串不是静态的,您将创建两个单独的对象,每个对象使用不同的sessionKey。单例方法可能会起作用,但在内存不足的情况下,它也很可能会被终止,重新创建时,字符串将再次为null。不要使用静态值。公共字符串sessionKey足够了,您如何期望两个单独的实例具有相同的sessionKey?根据我的评论:如果字符串不是静态的,那么您将创建两个单独的对象,每个对象使用不同的sessionKey。+1。如果要尽可能防止数据丢失,持久存储是最安全的方法。是的,用户可以清除您的应用程序数据,但他们也可以轻松地为应用程序添加FC,擦除静态字符串。你也可以做云存储@A-C:这就是我发现OP不想使用如此有用的功能的有趣之处。@SiddhartLele是的,我的错。实际上,我想到了SharedReferences,但我认为使用SharedReferences保存每个变量是一种不好的方法,因为我仍然用getter setter方法存储了大约12个变量。所以我在寻找另一种更简单更好的方法。谢谢你的回答@WandyWijayanto:我为Facebook和Twitter会话详细信息存储和检索了10个变量,从未见过因此而减速,也没有任何报告。如果这是你的担心,那么请放心。它很快。我很高兴能帮上忙-@是的,这是我关心的问题之一。第二,如果我从SharedReferences调用,我需要上下文,这意味着我必须更改很多代码,同时我受到时间的限制。编辑它将消耗大量的时间。CMIIW,因为也许我只是有一个糟糕的程序结构。如果要尽可能防止数据丢失,持久存储是最安全的方法。是的,用户可以清除您的应用程序数据,但他们也可以轻松地为应用程序添加FC,擦除静态字符串。你也可以做云存储@A-C:这就是我发现OP不想使用如此有用的功能的有趣之处。@SiddhartLele是的,我的错。实际上,我想到了SharedReferences,但我认为使用SharedReferences保存每个变量是一种不好的方法,因为我仍然用getter setter方法存储了大约12个变量。所以我在寻找另一种更简单更好的方法。谢谢你的回答@WandyWijayanto:我为Facebook和Twitter会话详细信息存储和检索了10个变量,从未见过因此而减速,也没有任何报告。如果这是你的担心,那么请放心。它很快。我很高兴能帮上忙-@是的,这是我关心的问题之一。第二,如果我从SharedReferences调用,我需要上下文,这意味着我必须更改很多代码,同时我受到时间的限制。编辑它将消耗大量的时间。CMIIW,因为也许我只是有一个糟糕的程序结构。公共静态类sEngine请仔细阅读静态类实际上是什么。您不必将一个类声明为静态的,实际上也不必为顶级类声明静态成员。执行sEngine.sessionKey是完全有效的,因为类成员是静态的,因此,ClassName.memberName是正确的,并不意味着类是静态的。公共静态类sEngine请仔细阅读静态类实际上是什么。您不必将一个类声明为静态的,实际上也不必为顶级类声明静态成员。执行sEngine.sessionKey是完全有效的,因为类成员是静态的,因此ClassName.memberName是正确的,并不意味着类是静态的。