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行目は「publicenum Glyx {」を参照し、140行目は「returngetForNormedValue(value + HIGH.value);」を参照しています。

ProGuardの構成をすでに確認しました。列挙型には次のルールが含まれています。

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

列挙型での「clone()」の呼び出しについて混乱しており、ここで何が起こるかを説明できません。この例外を回避するにはどうすればよいですか?この問題の説明はありますか?どんな助けでも大歓迎です。

環境:Android 4.0.4、ZTE Grand X In

4

0 に答える 0