Java 保存变量以在类上使用

Java 保存变量以在类上使用,java,android,android-intent,Java,Android,Android Intent,我想将字符串传递到我的android应用程序中的所有页面。当用户登录时,我将用户名和其他内容保存到字符串中。我想在多个页面上发送字符串。我该怎么做 我已经试着通过意图发送它 Intent myIntent = new Intent(view.getContext(), Help.class); myIntent.putExtra("userName", userNameString); startActivityForResult(myIntent, 0); 但是当我转到另一个页面时,我

我想将字符串传递到我的android应用程序中的所有页面。当用户登录时,我将用户名和其他内容保存到字符串中。我想在多个页面上发送字符串。我该怎么做

我已经试着通过意图发送它

Intent myIntent = new Intent(view.getContext(), Help.class);  
myIntent.putExtra("userName", userNameString);
startActivityForResult(myIntent, 0); 
但是当我转到另一个页面时,我不想每次都通过Intent发送数据

我试着从我解析的类中获取它,并将它们放入字符串中

HomeScreen home = new HomeScreen();
String userName= home.userNameString;
但由于我正在创建一个新的主屏幕实例,因此
userNameString
null


任何帮助都将不胜感激

声明一个静态变量并在任何地方使用它:

public class SomeClass
{
    public static String userNameString;
}
像这样使用它:

Strign s = SomeClass.userNameString;
将其值更改为:

SomeClass.userNameString = "new string";

声明静态变量并在任何地方使用它:

public class SomeClass
{
    public static String userNameString;
}
像这样使用它:

Strign s = SomeClass.userNameString;
将其值更改为:

SomeClass.userNameString = "new string";

调用
活动
不保证保留在内存中。。。Android系统可能会在任何时候摧毁它


如果子
活动
取决于用户名,则传递信息的正确方式是带有
意图
调用的
活动
不保证保留在内存中。。。Android系统可能会在任何时候摧毁它


如果子
活动
取决于用户名,那么传递信息的正确方法是使用
意图

注意不要使用静态或实例变量来保持此状态,因为Android应用程序的内存状态可能会不断变化。如果应用程序进程在后台被终止,仅存储在内存中的数据可能会在您不知情的情况下被销毁

最简单的机制是将数据持久化到
SharedReferences
,您可以从应用程序中的任何位置访问这些引用。因此,首先保存从登录中获得的字符串(这在活动中称为,仅供参考):

然后,应用程序中的其他地方(即其他活动实例)可以读取该字符串:

//Read the username string
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userName = prefs.getString("userName", "");
使用
SharedReferences
,您的值实际上是持久的,这意味着它们将永远存在磁盘上,不会因为应用程序的内存被重置而消失(这通常是一个优势,尤其是对于登录信息)。因此,当用户“注销”时,您还需要删除字符串,如下所示:


还有一些方法,如
contains()
,允许您检查当前是否保存了值(用户是否已登录?),等等。

注意不要使用静态或实例变量来保持此状态,因为Android应用程序的内存状态可能会不断变化。如果应用程序进程在后台被终止,仅存储在内存中的数据可能会在您不知情的情况下被销毁

最简单的机制是将数据持久化到
SharedReferences
,您可以从应用程序中的任何位置访问这些引用。因此,首先保存从登录中获得的字符串(这在活动中称为,仅供参考):

然后,应用程序中的其他地方(即其他活动实例)可以读取该字符串:

//Read the username string
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userName = prefs.getString("userName", "");
使用
SharedReferences
,您的值实际上是持久的,这意味着它们将永远存在磁盘上,不会因为应用程序的内存被重置而消失(这通常是一个优势,尤其是对于登录信息)。因此,当用户“注销”时,您还需要删除字符串,如下所示:


还有一些方法,如
contains()
,允许您检查当前是否保存了值(用户是否登录?),等等。

主屏幕是否扩展活动?您始终可以通过getApplicationContext()扩展应用程序类并访问其变量;主屏幕是否扩展活动?您始终可以通过getApplicationContext()扩展应用程序类并访问其变量;您还应该对加密此数据发表意见,因为将此类信息以纯文本形式存储到文件中从来都不是一个好主意。如果用户正在登录,则子
活动
需要知道在其父项中输入了哪个用户名。。。也许
SharedReferences
将是存储数据的正确方法,但最初可能应该通过意图向孩子发送用户名。此外,使用
getIntent
的孩子始终可以使用用户名(即使操作系统破坏了
活动
),您也应该对加密此数据发表意见,因为将此类信息以纯文本存储到文件中从来都不是一个好主意。如果用户正在登录,然后子
活动
需要一种方法来知道在其父项中输入了哪个用户名。。。也许
SharedReferences
将是存储数据的正确方法,但最初可能应该通过意图向孩子发送用户名。此外,使用
getIntent
的孩子始终可以使用用户名(即使操作系统破坏了
活动