У меня есть класс со всеми статическими элементами, которые мне нужно использовать для сохранения моих данных в широком диапазоне, используя их во всех действиях. Теперь все работает нормально после первого запуска приложения, но этот первый раз подряд всегда раздавливается. У меня есть SplashScreen, который должен инициализировать класс со значениями по умолчанию, но он всегда равен нулю. Вот звонок от брызг:Android static class null при первом запуске
LocalSettings.LoadSettings();
и вот класс. PS: переменная SETTING - это таблица, которую я использовал для сохранения данных в локальной базе данных. Он имеет одинаковые переменные класса LocalSettings.
общественного класса LocalSettings {
public LocalSettings(){}
private static Enums.TIPO_PERIODO periodoVisualizzato;
private static Calendar dataSpecificaPeriodoVisualizzazione;
private static Calendar dataInizioPeriodoVisualizzazione;
private static Calendar dataFinePeriodoVisualizzazione;
private static CATEGORIA categoriaSpecificaPeriodoVisualizzazione;
public static void LoadSettings(){
List<SETTINGS> settings = SETTINGS.listAll(SETTINGS.class);
if(settings == null || settings.isEmpty()){
SETTINGS setting = new SETTINGS();
setting.setPERIODOVISUALIZZATO(Enums.TIPO_PERIODO.SEMPRE);
setting.setGIORNOINIZIOPERIODOVISUALIZZAZIONE(Calendar.getInstance());
setting.setGIORNOFINEPERIODOVISUALIZZAZIONE(Calendar.getInstance());
setting.setDATASPECIFICAPERIODOVISUALIZZAZIONE(Calendar.getInstance());
setting.setCATEGORIASPECIFICAPERIODOVISUALIZZAZIONE(new CATEGORIA("", 0));
setting.save();
}else{
SETTINGS setting = settings.get(0);
setPeriodoVisualizzato(setting.getPERIODOVISUALIZZATO());
setDataInizioPeriodoVisualizzazione(setting.getGIORNOINIZIOPERIODOVISUALIZZAZIONE());
setDataFinePeriodoVisualizzazione(setting.getGIORNOFINEPERIODOVISUALIZZAZIONE());
setDataSpecificaPeriodoVisualizzazione(setting.getDATASPECIFICAPERIODOVISUALIZZAZIONE());
setCategoriaSpecificaPeriodoVisualizzazione(setting.getCATEGORIASPECIFICAPERIODOVISUALIZZAZIONE());
}
}
public static void SaveSettings(){
List<SETTINGS> settings = SETTINGS.listAll(SETTINGS.class);
SETTINGS setting;
if(settings == null || settings.isEmpty()){
setting = new SETTINGS();
}else{
setting = settings.get(0);
}
setting.setPERIODOVISUALIZZATO(getPeriodoVisualizzato());
setting.setGIORNOFINEPERIODOVISUALIZZAZIONE(getDataFinePeriodoVisualizzazione());
setting.setGIORNOINIZIOPERIODOVISUALIZZAZIONE(getDataInizioPeriodoVisualizzazione());
setting.setDATASPECIFICAPERIODOVISUALIZZAZIONE(getDataSpecificaPeriodoVisualizzazione());
setting.setCATEGORIASPECIFICAPERIODOVISUALIZZAZIONE(getCategoriaSpecificaPeriodoVisualizzazione());
setting.save();
}
public static void ResetSettings(){
setPeriodoVisualizzato(Enums.TIPO_PERIODO.SEMPRE);
setDataFinePeriodoVisualizzazione(Calendar.getInstance());
setDataInizioPeriodoVisualizzazione(Calendar.getInstance());
setDataSpecificaPeriodoVisualizzazione(Calendar.getInstance());
setCategoriaSpecificaPeriodoVisualizzazione(new CATEGORIA("", 0));
}
//getters and setters below
Я застрял здесь, так как через несколько часов и даже в сети я не нашел ничего, что решить мою проблему. Любая помощь будет оценена
EDIT: это где я получаю NullPointerException в "HomePageActivity":
TIPO_PERIODO period = LocalSettings.getPeriodoVisualizzato();
String periodString = period.name();
это TIPO_PERIODO перечисление:
public enum TIPO_PERIODO{
GIORNO, MESE, ANNO, SEMPRE, PERIODO_PERSONALIZZATO, CATEGORIA;
public static List<String> ListAll(){
ArrayList<String> tipi = new ArrayList<>();
for(TIPO_PERIODO tp : TIPO_PERIODO.values()){
tipi.add(tp.name());
}
return tipi;
}
}
и это полный стек след:
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: FATAL EXCEPTION: main
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: Process: com.example.piermisley.Activities, PID: 15902
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.piermisley.Activities/com.example.piermisley.Activities.HomePageActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.piermisley.Classes.Enums$TIPO_PERIODO.name()' on a null object reference
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2356)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:154)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5289)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.piermisley.Classes.Enums$TIPO_PERIODO.name()' on a null object reference
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.example.piermisley.Activities.HomePageActivity.LoadList(HomePageActivity.java:100)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.example.piermisley.Activities.HomePageActivity.LoadPageDatas(HomePageActivity.java:438)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.example.piermisley.Activities.HomePageActivity.onCreate(HomePageActivity.java:80)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5990)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:154)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5289)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
10-14 12:50:55.196 15902-15902/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
EDIT: ps: моя проблема не исключение n, моя проблема - пустой статический класс при первом запуске приложения. :)
попробовать 'если (settings.size()> 0 && настройки! = NULL)' –
@MD Вы, вероятно, хотите сделать нулевой чек первым. –
@MD благодарит за ответ, я попробовал его (с нулем до и размером после), но он все еще равен нулю при первом запуске –