2015-10-14 5 views
1

У меня есть класс со всеми статическими элементами, которые мне нужно использовать для сохранения моих данных в широком диапазоне, используя их во всех действиях. Теперь все работает нормально после первого запуска приложения, но этот первый раз подряд всегда раздавливается. У меня есть 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, моя проблема - пустой статический класс при первом запуске приложения. :)

+0

попробовать 'если (settings.size()> 0 && настройки! = NULL)' –

+2

@MD Вы, вероятно, хотите сделать нулевой чек первым. –

+0

@MD благодарит за ответ, я попробовал его (с нулем до и размером после), но он все еще равен нулю при первом запуске –

ответ

0

Я не вижу, где вы звоните LoadSettings() в контексте вашего приложения. Пока вы это сделаете, periodoVisualizzato будет пустым. Является ли «SplashScreen» активным?

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

+0

Я попробую это через некоторое время , просто вопрос: зачем второму запустить нулевое исключение является n o больше показов? –

+0

Хорошо, теперь я на ПК. LoadSettings находится в SplashScreen (который является активностью). Вот почему я не получаю ошибку –

+0

.... нашел проблему .. в проверке SETTING существовать, если нет, я только создавал новую УСТАНОВКА, но не заполнение статических переменных ... поэтому в первый раз они были пустыми. –

0

Обнаружена проблема, я инициализировал LocalSetting только в том случае, если объект 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()); 
Смежные вопросы