1

ACRA 报告的我的 Android 应用程序出现了一个奇怪的错误。似乎在枚举中调用了 clone()。这是堆栈跟踪:

        java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            ... 2 more
    Caused by: java.lang.CloneNotSupportedException: Class doesn't implement Cloneable
            at java.lang.Object.clone(Object.java:155)
            at org.digitalcure.ccnf.app.io.data.Glyx.org.digitalcure.ccnf.app.io.data.Glyx[] values()(SourceFile:17)
            at org.digitalcure.ccnf.app.io.data.Glyx.org.digitalcure.ccnf.app.io.data.Glyx getForDatabaseValue(int)(SourceFile:140)
    ...

这是枚举的代码:

package org.digitalcure.ccnf.app.io.data;

import org.digitalcure.ccnf.app.R;
import android.content.Context;
import android.content.res.Resources;

public enum Glyx {
    HIGH(-1),

    MEDIUM(0),

    LOW(1);

    private final int value;

    private Glyx(final int value) {
        this.value = value;
    }

    public static Glyx getForNormedValue(final int value) {
        final Glyx[] array = Glyx.values();
        for (final Glyx candidate : array) {
            if (candidate.value == value) {
                return candidate;
            }
        }

        return null;
    }

    public static Glyx getForDatabaseValue(final int value) {
        return getForNormedValue(value + HIGH.value);
    }

    // more code follows...
}

我删除了文档和其他无趣的代码,所以第 17 行引用了“public enum Glyx {”,第 140 行引用了“return getForNormedValue(value + HIGH.value);”。

我已经检查了我的 ProGuard 配置。它包含以下枚举规则:

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

我对枚举中的“clone()”调用感到困惑,我无法解释这里发生了什么。我能做些什么来避免这个异常?这个问题有什么解释吗?任何帮助表示赞赏。

环境:Android 4.0.4,中兴Grand X In

4

0 回答 0