我认为您的类已被类加载器(在 GC 期间)从内存中删除,并在您下次使用 Global 类时加载。
我的建议是为此使用 Singelton 类,您可以拥有这样的东西
public class Global {
public String USER_ID = "";
public String USER_NAME = "";
public String USER_PASSWORD = "";
//constructor
private Global(){
// just to prevent object creation from outside
}
//static reference
public static Global global=null;
public Global getInstance(){
return ((global!=null)? global : (global=new Global()) ;
}
}
现在无论你想使用这个类,你都可以得到这个对象,singelton 逻辑确保它们只是一个在所有人之间共享的对象。
您可以使用在您的线程中获取参考
global = Global.getInstance();
现在您可以使用变量,即使用global.USER_ID 的USER_ID
由于您有全局对象的引用,因此在您的线程处于活动状态之前,GC 不会将其从内存中删除。
注意
我使用公共变量只是为了说明,但在大多数情况下不推荐使用它们。
编辑
为了保存用户数据,我推荐SharedPreferences,您可以按如下方式使用它们:-
private final String YourAppName_PREFS_NAME = "chooseAMeaningFulName";
private final String YourAppName_USERNAME = "username";
private final String YourAppName_PASSWORD = "password";
/*This function will save the user name and password for providing Automatically login in future*/
public void saveUserData() {
if ( rememberMeChckbox.isChecked() ) {
// Log.i("loginFrag", "Saving userName: Pass " + userName + " : " + password);
loginActivity.getSharedPreferences(YourAppName_PREFS_NAME, Context.MODE_PRIVATE).edit().putString(YourAppName_USERNAME, userName)
.putString(YourAppName_PASSWORD, password).commit();
} else {
loginActivity.getSharedPreferences(YourAppName_PREFS_NAME, Context.MODE_PRIVATE).edit().remove(RBR_USERNAME).remove(RBR_PASSWORD).commit();
}
}
/*This function returns the previous data from the SharedPreferences and fills the UserName and Password Text Box*/
private void getPreviousUserData() {
SharedPreferences preferences = loginActivity.getSharedPreferences(YourAppName_NAME, Context.MODE_PRIVATE);
userName = preferences.getString(YourAppName_USERNAME, null);
password = preferences.getString(YourAppName_PASSWORD, null);
// Log.i("loginFrag", "Got userName: Pass " + userName + " : " + password);
if ( userName != null ) {
uText.setText(userName);
} else {
uText.setText("android");
}
if ( password != null ) {
passText.setText(password);
} else {
passText.setText("android");
}
}