Android java.lang.ExceptionInInitializerError

时间:2017-03-17 03:53:51

标签: android

以下是我声明和初始化静态变量的方法

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)

这里发生了什么?我该如何解决?

2 个答案:

答案 0 :(得分:0)

您在自己的静态初始化中对变量进行循环引用。

这个怎么样?

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

答案 1 :(得分: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);
    }