我正在开发一个Android项目。我有一个带有一些静态字段的类。我使用静态块从另一个类初始化这些字段。但是,当稍后在程序中访问静态字段时,字段中设置的值将丢失。
请参阅以下两个类:
public class Constants {
static {
String TAG = "Credentials";
Log.d(TAG, "Inside static block");
Logger.setCredentials(tempUserId, tempPasswd);
Log.d(TAG, "Inside static block : Logger.userId : " +
Logger.userId + " : Logger.password : " + Logger.password);
new Logger("Test");
Log.d(TAG, "Inside static block : After creatinf object : Logger.userId : " +
Logger.userId + " : Logger.password : " + Logger.password);
}
}
public class Logger {
public static String userId;
public static String password;
public static void setCredentials(String userId, String password) {
Logger.userId = userId;
Logger.password = password;
Log.d("Credentials","Inside setCredentials : Logger.userId : " +
Logger.userId + " : Logger.password : " + Logger.password);
}
public Logger(String tag) {
super();
Log.d("Credentials","Inside constructor : Logger.userid : " +
Logger.userId + " : Logger.password : " + Logger.password);
if (Logger.userId == null || Logger.password == null) {
throw new NullPointerException();
} else {
}
}
}
节目输出:
内部静态块
内部setCredentials:Logger.userId:testuser:Logger.password:abc.123
内部静态块:Logger.userId:testuser:Logger.password:abc.123
内部构造函数:Logger.userid:testuser:Logger.password:abc.123
内部静态块:在creatinf对象之后:Logger.userId:testuser:Logger.password: abc.123
内部构造函数:Logger.userid:null:Logger.password:null
显示java.lang.NullPointerException
当作为Java应用程序运行时,代码可以正常工作。在android中运行时,字段值会丢失。请说明出了什么问题?
还有一件事,如果在代码中处理异常,则在异常处理后再次调用静态块。
答案 0 :(得分:0)
现在可能不是你的问题,但请注意Android并不能让你对你的进程存在多长时间(以及你的静态变量)有很多控制权。 Android可以免费杀死您的进程(如果您的应用程序暂停)并稍后重新创建它。您有责任在需要和适当的情况下保存状态。