2017-03-17 48 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); 
    } 
相关问题