2017-03-17 47 views
0

這是我如何聲明和初始化我的靜態變量的Android java.lang.ExceptionInInitializerError

private static final SparseIntArray level2site = new SparseIntArray() {{ 
    level2site.append(0, 198); 
    level2site.append(10010, 199); 
    level2site.append(10020, 200); 
    level2site.append(10030, 201); 
}}; 

而且我得到了這個

Process: com.chotot.vn.dev, PID: 3104                 java.lang.ExceptionInInitializerError 
at com.chotot.vn.property.xiti.PropertyXitiUtils.wrapRegion(PropertyXitiUtils.java:0) 
at com.chotot.vn.fragments.AdsFragment.senTagPropertyHomePage(AdsFragment.java:1623) 
at            com.chotot.vn.fragments.AdsFragment.enableVerticalMode(AdsFragment.java:1606)     at com.chotot.vn.fragments.AdsFragment.tryEnableVerticalMode(AdsFragment.java:576) 
at com.chotot.vn.fragments.AdsFragment.onViewCreated(AdsFragment.java:555) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1132) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

什麼是發生在這裏?我該如何解決它?

+0

'com.chotot.vn.property.xiti.PropertyXitiUtils'這是你的代碼? –

+0

是的,這是我的代碼。 –

+0

那麼'PropertyXitiUtils.java:0'發生了什麼?你所展示的只是一些隨機的'SparseIntArray',它絕對不在該文件的第一行。 –

回答

0

您正在對其自己的靜態初始化中的變量進行循環引用。

這個怎麼樣?

private static final SparseIntArray level2site = new SparseIntArray() {{ 
    append(0, 198); 
    append(10010, 199); 
    append(10020, 200); 
    append(10030, 201); 
}}; 
+0

哇它修復了我的問題。謝謝。 –

0

ExceptionInInitializerError的原因是如果你的靜態初始化塊內部有問題。這裏改變你的代碼是這樣的

private static final SparseIntArray level2site = new SparseIntArray(); 

{ 
    level2site.append(0, 198); 
    level2site.append(10010, 199); 
    level2site.append(10020, 200); 
    level2site.append(10030, 201); 
} 

請注意,我已經把分號放在聲明的末尾,其餘的是在一個塊內。我執行這個代碼,沒有錯誤。值正確地分配在其中。

印有驗證碼的數據:

for(int i = 0; i < level2site.size(); i++) { 
     int key = level2site.keyAt(i); 
     // get the object by the key. 
     Object obj = level2site.get(key); 
     System.out.println("SPR "+obj); 
    } 
相關問題