2

アプリのコントロールパネルで、再現できないだけでなく、意味がないというエラーレポートを見つけました。

これはスタックトレースです:

    java.lang.ClassCastException: java.lang.Object[] cannot be cast to ohm.quickdice.entity.RollResult[]
    at ohm.quickdice.activity.QuickDiceActivity.setupRollMenu(QuickDiceActivity.java:575)
    at ohm.quickdice.activity.QuickDiceActivity.onCreateContextMenu(QuickDiceActivity.java:459)
    at android.view.View.createContextMenu(View.java:6229)
    at com.android.internal.view.menu.ContextMenuBuilder.show(ContextMenuBuilder.java:81)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.showContextMenuForChild(PhoneWindow.java:2292)
    at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:564)
    at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:564)
    at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:564)
    at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:564)
    at android.widget.AbsListView.performLongPress(AbsListView.java:2772)
    at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:2717)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4514)
    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:790)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
    at dalvik.system.NativeStart.main(Native Method)

これは、例外が発生するコードです。

ArrayList<RollResult[]> resultList;
RollResult[] lastResult;

...

protected void setupRollMenu(int index, ContextMenu menu) {
    RollResult[] rollItem;
    RollResult[] nextItem;
    RollResult mergedRoll;

    if (index < 0) {
        rollItem = lastResult;
    } else {
        rollItem = resultList.get(index);
    }
    if (index + 1 < resultList.size()) {
        nextItem = resultList.get(index + 1); //This is row 575
    } else {
        nextItem = null;
    }
    ...

命令「nextItem=resultList.get(int);」はどうでしょうか。resultListはArrayListとして定義され、nextItemはRollResult [] ...型のオブジェクトであるため、この例外が発生する可能性があります。

Androidがインスタンス状態データをバンドルにシリアル化および逆シリアル化する方法に依存する可能性がありますか?

ここで、シリアル化がどのように行われるかを示します。

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putSerializable(KEY_LAST_ROLL, lastResult);
    outState.putSerializable(KEY_ROLL_LIST, resultList);
    super.onSaveInstanceState(outState);
}

これが逆シリアル化です。

@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        Serializable tmp;
        tmp = savedInstanceState.getSerializable(KEY_LAST_ROLL);
        if (tmp instanceof RollResult[]) {
            lastResult = (RollResult[])tmp;
        }
        tmp = savedInstanceState.getSerializable(KEY_ROLL_LIST);
        if (tmp instanceof ArrayList<?>) {
            resultList = (ArrayList<RollResult[]>)tmp;
        }
    }

    if (lastResult == null) {
        lastResult = new RollResult[0];
    }

    if (resultList == null) {
        resultList = new ArrayList<RollResult[]>();
    }
}

ありがとう。

4

0 に答える 0