Я работаю над проектом 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
Внутри статического блока: после создания объекта: Logger.userId: testuser: Logger.password: abc.123
Внутри конструктора: Logger.userid: null: Logger.password: null
java.lang.NullPointerException
Код отлично работает при запуске в качестве Java-приложения.Значения полей теряются при запуске в Android.Подскажите, пожалуйста, что идет не так?
Еще одна вещь: если исключение обрабатывается в коде, то после обработки исключения статический блок вызывается снова.