0

我想将字符串传递给我的 android 应用程序中的所有页面。当用户登录时,我将 userName 和其他人保存到字符串中。我想通过多个页面发送字符串。我怎样才能做到这一点?

我试图通过 Intent 发送它

Intent myIntent = new Intent(view.getContext(), Help.class);  
myIntent.putExtra("userName", userNameString);
startActivityForResult(myIntent, 0); 

但是当我转到另一个页面时,我不想每次都通过 Intent 发送数据。

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

HomeScreen home = new HomeScreen();
String userName= home.userNameString;

但是因为我正在创建 HomeScreen 的新实例,所以userNameStringnull

任何帮助将不胜感激

4

3 回答 3

2

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

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

//Write the username string to preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putString("userName", userNameString).commit();

然后在您的应用程序的其他地方(即其他 Activity 实例)可以读取该字符串:

//Read the username string
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userName = prefs.getString("userName", "");

使用SharedPreferences,您的值实际上是持久的,这意味着它们将永远存在于磁盘上,并且不会因为您的应用程序的内存被重置而消失(这通常是一个优势,尤其是对于登录信息)。因此,您还需要在用户“注销”时删除字符串,如下所示:

//Remove the username string from preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().remove("userName").commit();

还有一些方法contains()可以让您检查当前是否保存了值(用户是否登录?)等。

于 2012-07-10T20:46:50.017 回答
1

调用Activity不保证保留在内存中...... Android系统可能随时销毁它。

如果孩子Activity依赖于用户名,那么传递信息的正确方法是使用Intent.

于 2012-07-10T20:42:25.387 回答
0

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

public class SomeClass
{
    public static String userNameString;
}

像这样使用它:

Strign s = SomeClass.userNameString;

将其值更改为:

SomeClass.userNameString = "new string";
于 2012-07-10T20:40:16.353 回答