Java Android静态类在第一次运行时为空
我有一个包含所有静态成员的类,我需要使用这些静态成员在广泛的范围内保存数据,并在所有活动中使用它们。 现在,在应用程序第一次运行之后,一切都正常工作,但是第一次运行总是会崩溃。我有一个SplashScreen,它应该用默认值初始化类,但它总是空的。 以下是splash的电话:Java Android静态类在第一次运行时为空,java,android,initialization,static-classes,Java,Android,Initialization,Static Classes,我有一个包含所有静态成员的类,我需要使用这些静态成员在广泛的范围内保存数据,并在所有活动中使用它们。 现在,在应用程序第一次运行之后,一切都正常工作,但是第一次运行总是会崩溃。我有一个SplashScreen,它应该用默认值初始化类,但它总是空的。 以下是splash的电话: LocalSettings.LoadSettings(); 这是课堂。PS:设置变量是一个用于在本地数据库上保存数据的表。它具有与LocalSettings类相同的变量 公共类本地设置{ public LocalSett
LocalSettings.LoadSettings();
这是课堂。PS:设置变量是一个用于在本地数据库上保存数据的表。它具有与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
这是TIPO_PERIODO enum:
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;
}
}
编辑:ps:我的问题不是例外,我的问题是第一个应用程序运行时的空静态类。我看不到你在应用程序上下文中调用
LoadSettings()
。在你这样做之前,periodovisualizato
将为空。“SplashScreen”是活动吗
在创建任何活动之前,您可能可以在
onCreate()
中调用应用程序类中的LocalSettings.LoadSettings()。我看不到您在应用程序上下文中调用LoadSettings()
的位置。在此之前,periodovisualizato
将为空。“SplashScreen”是活动吗
也许您可以在
onCreate()中调用应用程序类中的LocalSettings.LoadSettings()
,在创建任何活动之前。发现问题,我只是在设置实体确实存在的情况下初始化LocalSetting,如果不存在,我只是在创建一个新的设置。谢谢大家的回复。我刚刚用以下内容修改了该子句:
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());
发现问题,我只是在设置实体确实存在的情况下初始化LocalSetting,如果不存在,我只是在创建一个新设置。无论如何,感谢所有人的回复。我只是用以下内容修改了该子句:
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());
尝试
如果(settings.size()>0&&settings!=null)
@MD您可能想先进行空值检查。@MD感谢您的回复,我尝试过了(之前为null,之后为size)但是第一次运行时仍然为空。请发布stacktrace。@m0skit0好的,我有点知道如何修复空指针。.xD我的问题在静态类中,我不是这方面的专家。。不在例外情况下if(settings.size()>0&&settings!=null)
@MD您可能想先做空检查。@MD感谢您的回复,我尝试过了(之前为空,之后为大小)但是第一次运行时仍然为空。请发布stacktrace。@m0skit0 wel,我有点知道如何修复空指针..xD我的问题是在静态类中,我不是这方面的专家..不在例外情况下我将在一段时间内尝试,只是一个问题:为什么第二次运行时不再显示空异常?好的,现在我在pc上。加载设置在Spl中ashScreen(wich是一项活动)…这就是为什么我没有得到错误…发现了问题..在检查设置是否存在时,如果没有,我只是创建了一个新的设置,但没有填充静态变量…所以第一次它们为空..我的badI将在一段时间后尝试,只是一个问题:为什么第二次运行时空异常不再显示?好的,现在我在pc上。加载ttings在SplashScreen中(这是一个活动)…这就是为什么我没有得到错误…发现问题..在检查设置是否存在时,如果没有,我只是创建了一个新设置,但没有填充静态变量…所以第一次它们为空..我的错误
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());