Статический класс Android нулевой при первом запуске

У меня есть класс со всеми статическими членами, которые мне нужно использовать для сохранения моих данных в широком объеме, используя их во всех действиях. Теперь все работает нормально после первого запуска приложения, но этот первый запуск всегда дает сбой. У меня есть SplashScreen, который должен инициализировать класс значениями по умолчанию, но он всегда равен нулю. Вот звонок от заставки:

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

Я застрял здесь несколько часов, и даже в сети я не нашел ничего, что решило бы мою проблему. Любая помощь будет оценена

РЕДАКТИРОВАТЬ: это где я получаю исключение 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) 

РЕДАКТИРОВАТЬ: PS: моя проблема не является исключением, моя проблема является нулевой статический класс при первом запуске приложения.:)

2 ответа

Я не вижу, куда ты звонишь LoadSettings() в контексте вашей заявки. Пока ты не сделаешь, periodoVisualizzato будет нулевым "SplashScreen" - это занятие?

Возможно, вы можете вызвать LocalSettings.LoadSettings() в вашем классе приложения в onCreate()до того, как какие-либо действия были созданы.

Нашел проблему, я инициализировал LocalSetting, только если сущность SETTING существовала, если нет, я только создавал новую SETTING. В любом случае спасибо всем за ответ. Я только что изменил предложение:

    SETTINGS setting;

    if(settings == null || settings.isEmpty()){
        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 {
        setting = settings.get(0);
    }
        setPeriodoVisualizzato(setting.getPERIODOVISUALIZZATO());
        setDataInizioPeriodoVisualizzazione(setting.getGIORNOINIZIOPERIODOVISUALIZZAZIONE());
        setDataFinePeriodoVisualizzazione(setting.getGIORNOFINEPERIODOVISUALIZZAZIONE());
        setDataSpecificaPeriodoVisualizzazione(setting.getDATASPECIFICAPERIODOVISUALIZZAZIONE());
        setCategoriaSpecificaPeriodoVisualizzazione(setting.getCATEGORIASPECIFICAPERIODOVISUALIZZAZIONE());
Другие вопросы по тегам