Я следовал совету, данному здесь в нескольких постах, как объявлять глобальные константы:
public class Constants {
public static final int i1 = 1;
public static final int i2 = 2;
}
Я просто включаю этот класс в свой проект и ссылаюсь на константы, подобные этому:
in any other class...
GlobalsVars.gi1 = Constants.i1;
(ps Я надеюсь, что это нормально, и не нужно ничего делать с классом Constants, например, инициализацией или чем-то еще.)
Но, как я выяснил здесь: присваивание int целому числу с использованием статических глобальных переменных - не очень хорошая идея. Мое приложение иногда падает при доступе к константам.
Хотя я нахожу это действительно странным, поскольку мое приложение довольно маленькое, но, возможно, это класс Constants, а не активность, в некоторых случаях он действительно удаляется из памяти, хотя я и обращаюсь к его константам во всех своих действиях. Вот почему я думаю, что его все равно не следует удалять из памяти.
Но наверняка в некоторых случаях происходит сбой моего приложения при доступе к значению Constants.i1.
Что было бы лучшим способом просто объявить некоторые константы надежным способом. (В c-Derivatives есть простые в использовании макросы) Но в Android нет ничего подобного.
-> все, что мне нужно, это «надежные» константы в Java ...
EDIT:
добавлено объявление класса GlobalVars
public class GlobalVars {
public static Integer gi1;
public static Integer gi2;
}
Большое спасибо
EDIT:
добавлен журнал аварий
java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.xxxx.xxxx / com.xxxx.xxxx.screens.One_screen}: java.lang.NullPointerException
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1830)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1851)
на android.app.ActivityThread.access $ 1500 (ActivityThread.java:132)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1038)
на android.os.Handler.dispatchMessage (Handler.java:99)
на android.os.Looper.loop (Looper.java:150)
на android.app.ActivityThread.main (ActivityThread.java:4293)
в java.lang.reflect.Method.invokeNative (родной метод)
в java.lang.reflect.Method.invoke (Method.java:507)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:849)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:607)
в dalvik.system.NativeStart.main (собственный метод)
Вызывается: java.lang.NullPointerException
на com.xxxx.xxxx.screens.Settings_screen.presentOnScreen (One_screen.java:172)
на com.xxxx.xxxx.screens.Settings_screen.onCreate (One_screen.java:49)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1072)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1794)
... еще 11
и строка 172 в One_screen:
if (GlobalVars.gi1 == Constants.i1){