我想将字符串传递给我的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的新实例,因此userNameString
为null
非常感谢任何帮助
答案 0 :(得分:2)
请注意使用静态或实例变量来保持此状态,因为Android应用程序的内存状态可能会不断变化。如果您的应用程序进程在后台被杀死,那么只有存储在内存中的数据才能在您不知情的情况下销毁。
最简单的机制是将您的数据保存到SharedPreferences
,您可以从应用程序的任何位置访问。因此,首先保存从登录中获得的字符串(在Activity,FYI中调用):
//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()
这样的方法可以让你检查当前是否保存了值(用户登录了吗?)等。
答案 1 :(得分:1)
无法保证调用Activity
保留在内存中...... Android系统可能会随时销毁它。
如果孩子Activity
取决于用户名,那么传递信息的正确方法是使用Intent
。
答案 2 :(得分:0)
声明一个静态变量并在任何地方使用它:
public class SomeClass
{
public static String userNameString;
}
使用它像:
Strign s = SomeClass.userNameString;
将其值更改为:
SomeClass.userNameString = "new string";