Android中的Java静态列表

Android中的Java静态列表,java,android,list,android-listview,Java,Android,List,Android Listview,我在模型类中有一个静态列表: public static List<HomePageOptions> homePageOptions = Arrays.asList( new HomePageOptions("Title1_1", "Title2_1"), new HomePageOptions("Title1_2!", "Title2_2"), new HomePageOptions("Title1_3", "Title2_3"), new Home

我在模型类中有一个静态列表:

public static List<HomePageOptions> homePageOptions = Arrays.asList(
    new HomePageOptions("Title1_1", "Title2_1"),
    new HomePageOptions("Title1_2!", "Title2_2"),
    new HomePageOptions("Title1_3", "Title2_3"),
    new HomePageOptions("Title1_4", "Title2_4")
);
我有一个这样打开的活动:

 @Override
 protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_home);


    List<String> values = new ArrayList<String>();

    for(HomePageOptions ho : PharmacyModel.homePageOptions){
        values.add(ho.getTitle1());
    }
 }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
列表值=新的ArrayList();
对于(HomePageOptions ho:PharmacyModel.HomePageOptions){
add(ho.getTitle1());
}
}
for循环给了我一个ExceptionInInitializationError。当我在for循环之前创建一个常规列表时,我没有遇到任何问题,但是我希望将此结构保留在模型类中。我一直在试图找到一个解决办法,来解释为什么会这样。我猜是homePageOptions列表上的静态修饰符。有人能帮忙吗

下面是调试器所说的

Thread [<1> main] (Suspended (exception ExceptionInInitializerError))   
<VM does not provide monitor information>   
HomeActivity.onCreate(Bundle) line: 33  
HomeActivity(Activity).performCreate(Bundle) line: 4465 
Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1049   
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1920    
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1981 
ActivityThread.access$600(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 123    
ActivityThread$H.handleMessage(Message) line: 1147  
ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 4424    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 784  
ZygoteInit.main(String[]) line: 551 
NativeStart.main(String[]) line: not available [native method]  
Thread[main](挂起(异常除外InInitializeRerror))
HomeActivity.onCreate(Bundle)行:33
HomeActivity(Activity).performCreate(Bundle)行:4465
检测.callActivityOnCreate(活动,捆绑)行:1049
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord,Intent)行:1920
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord,Intent)行:1981
ActivityThread.access$600(ActivityThread,ActivityThread$ActivityClientRecord,Intent)行:123
ActivityThread$H.handleMessage(消息)行:1147
ActivityThread$H(处理程序)。dispatchMessage(消息)行:99
Looper.loop()行:137
ActivityThread.main(字符串[])行:4424
invokenactive(Object,Object[],Class,Class[],Class,int,boolean)行:不可用[本机方法]
调用(对象,对象…)行:511
ZygoteInit$MethodAndArgsCaller.run()行:784
颧骨单位。主(字符串[])行:551
NativeStart.main(字符串[])行:不可用[本机方法]
和LogCat

06-20 04:08:06.274: E/AndroidRuntime(1580): FATAL EXCEPTION: main
06-20 04:08:06.274: E/AndroidRuntime(1580): java.lang.ExceptionInInitializerError
06-20 04:08:06.274: E/AndroidRuntime(1580):     at com.allgoodpeopleus.rootsoflife.HomeActivity.onCreate(HomeActivity.java:24)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.Activity.performCreate(Activity.java:4465)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.os.Looper.loop(Looper.java:137)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at android.app.ActivityThread.main(ActivityThread.java:4424)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at dalvik.system.NativeStart.main(Native Method)
06-20 04:08:06.274: E/AndroidRuntime(1580): Caused by: java.lang.NullPointerException
06-20 04:08:06.274: E/AndroidRuntime(1580):     at ROLModel.Parameter.setValue(Parameter.java:91)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at ROLModel.Parameter.<init>(Parameter.java:21)
06-20 04:08:06.274: E/AndroidRuntime(1580):     at ROLModel.PharmacyModel.<clinit>(PharmacyModel.java:77)
06-20 04:08:06.274: E/AndroidRuntime(1580):     ... 15 more
06-20 04:08:06.274:E/AndroidRuntime(1580):致命异常:主
06-20 04:08:06.274:E/AndroidRuntime(1580):java.lang.ExceptionInInitializeError
06-20 04:08:06.274:E/AndroidRuntime(1580):在com.allgoodpeopleus.rootsoffile.HomeActivity.onCreate(HomeActivity.java:24)
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.Activity.performCreate(Activity.java:4465)上
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)上
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)上
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.ActivityThread.access$600(ActivityThread.java:123)
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-20 04:08:06.274:E/AndroidRuntime(1580):位于android.os.Handler.dispatchMessage(Handler.java:99)
06-20 04:08:06.274:E/AndroidRuntime(1580):在android.os.Looper.loop(Looper.java:137)
06-20 04:08:06.274:E/AndroidRuntime(1580):位于android.app.ActivityThread.main(ActivityThread.java:4424)
06-20 04:08:06.274:E/AndroidRuntime(1580):位于java.lang.reflect.Method.Invokenactive(本机方法)
06-20 04:08:06.274:E/AndroidRuntime(1580):位于java.lang.reflect.Method.invoke(Method.java:511)
06-20 04:08:06.274:E/AndroidRuntime(1580):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-20 04:08:06.274:E/AndroidRuntime(1580):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-20 04:08:06.274:E/AndroidRuntime(1580):在dalvik.system.NativeStart.main(本机方法)
06-20 04:08:06.274:E/AndroidRuntime(1580):由以下原因引起:java.lang.NullPointerException
06-20 04:08:06.274:E/AndroidRuntime(1580):at ROLModel.Parameter.setValue(Parameter.java:91)
06-20 04:08:06.274:E/AndroidRuntime(1580):在ROLModel.Parameter.(Parameter.java:21)
06-20 04:08:06.274:E/AndroidRuntime(1580):ROLModel.PharmacyModel.(PharmacyModel.java:77)
06-20 04:08:06.274:E/AndroidRuntime(1580):。。。还有15个
这个

应该是

public HomePageOptions (String title1, String title2) {
    Title1 = title1;
    Title2 = title2;
}

PharmacyModel类包含公共静态列表homePageOptions。在类的其他地方,我有几个类参数的实例:

public static Parameter Age = new Parameter("Age", 30, "years");
在哪里

由于在构造函数中调用setValue,侦听器为null,因此导致问题。错误出现在列表中,但该列表或HomePageOptions没有任何问题。解决办法是换成直线

listener.ValueChanged(); 


为什么是静态的?c#端口是一个大型静态类,由所有静态对象组成。我很乐意让它不是静态的,但需要关于如何移植的帮助。尝试不使用相同名称的列表和类名
HomePageOptions
。尝试了之后,仍然有相同的问题。调试器显示了PharmacyModel.homePageOptions中包含的内容,这是正确的。我认为您的问题在于homePageOptions列表的名称与类的名称相同。这不应该是相同的。此外,变量名总是以小写字母开头。当我在homePageOptions POJO中实现这是公共静态列表homePageOptions时,仍然存在相同的问题?那么您可以添加PharmacyModel的代码吗?虫子可能埋在那里了。我可以问为什么?。当回答时,考虑解释为什么你提供这个解决方案的原因,当然,解释它!实际上,您并没有解释为什么要提供此解决方案。你应该提到一些更好的东西,因为。。。或者这是因为。。。。此外,你必须记住,你这样做是为了整个社区,也为了不在其中的人,而不仅仅是为了你自己。
public static Parameter Age = new Parameter("Age", 30, "years");
public class Parameter {

public Object Value;

public Parameter(String name, Object defaultValue, String units) {
    setValue(defaultValue);
    //set others
}

ParameterChangedEvent listener;
public void addListener(ParameterChangedEvent event){
    listener = event;
}

public void setValue(Object value) {
    Value = value;  

    listener.ValueChanged();
}
listener.ValueChanged(); 
if(listener != null) listener.ValueChanged();