2014-06-20 67 views
0

Java靜態列表我有一個模型類的靜態列表:Android中

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") 
); 

其中HomePageOptions定義:

public class HomePageOptions 
{ 
    String Title1; 
    String Title2; 

public HomePageOptions (String title1, String title2) 
{ 
    setTitle1(title1); 
    setTitle2(title2); 
} 

//regular setters and getters 
} 

我有這樣打開了一個活動:

@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()); 
    } 
} 

for循環給我一個ExceptionInInitializationError。當我在for循環之前創建一個常規列表時,我遇到了任何問題,但我希望將此結構保留在模型類中。我一直在試圖找到一個解決方案,爲什麼這是。我的猜測是List 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] 

和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 
+0

,爲什麼它是靜態的? –

+0

由靜態對象組成的大靜態類的c#端口。我很酷,使它不是靜態的,但需要幫助如何端口 – BBH1023

+1

嘗試不使用相同的名稱'HomePageOptions'列表和類名稱 – sujithvm

回答

0

PharmacyModel類包含公共靜態列表homePageOptions。在亞洲其他類中,我有類參數的幾個實例:

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(); 
} 

因爲調用構造函數的setValue,listener爲null造成問題的原因。該錯誤表現在列表中,但該列表或HomePageOptions沒有任何錯誤。解決的辦法是改變線路

listener.ValueChanged(); 

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

public HomePageOptions (String title1, String title2) 
{ 
    setTitle1(title1); 
    setTitle2(title2); 
} 

應該

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

仍然有同樣的問題,當我實現這個 – BBH1023

+0

是公共靜態列表 homePageOptions在您的HomePageOptions POJO? –

+0

不,它是在一個單獨的類 – BBH1023