以下是我声明和初始化静态变量的方法
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 :(得分: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);
}