ClassNotFoundException при чтении посылки - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь восстановить свое приложение из посылки (сохраненной в пакете).

Моя активность использует OpenGL, поэтому он создает это представление поверхности и вызывает эти функции при сохранении или восстановлении приложения.

class MySurfaceView extends GLSurfaceView {
    /* Lots of other stuff */
    public void onRestoreInstanceState(Bundle inState) {
        Log.d("Wormhole", "Restoring instance state");
        mRenderer.onRestoreInstanceState(inState);
    }

    public void onSaveInstanceState(Bundle outState) {
        Log.d("Wormhole", "Saving instance state");
        mRenderer.onSaveInstanceState(outState);
    }
}

в мРендерер

public void onRestoreInstanceState(Bundle inState){
    mFlowManager = inState.getParcelable("flowmanager");
}

public void onSaveInstanceState (Bundle outState){
    outState.putParcelable("flowmanager", mFlowManager);
}

в mFlowManager

public class FlowManager implements Touchable, Parcelable {
private enum State {
    SPLASH, MENU, GAME_SINGLE, GAME_MULTI
};

private Connection mConnection;
private ScoreDataSource mScoreDataSource;
private GameEngine mGameEngine;
private SplashScreen mSplash;
private MainMenu mMenu;
private State mState = State.SPLASH;
private long mTime;
private int mVersionID;

/* Other stuff */

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel out, int flags) {
    out.writeString(mState.name());
    out.writeParcelable(mSplash, 0);
    out.writeParcelable(mMenu, 0);
}

public static final Parcelable.Creator<FlowManager> CREATOR = new Parcelable.Creator<FlowManager>() {
    public FlowManager createFromParcel(Parcel in) {
        return new FlowManager(in);
    }

    public FlowManager[] newArray(int size) {
        return new FlowManager[size];
    }
};

private FlowManager(Parcel in) {
    mConnection = new Connection();

    mState = State.valueOf(in.readString());
    mSplash = in.readParcelable(null); // Exception occurs here
    mMenu = in.readParcelable(null);
}

}

Класс FlowManager имеет экземпляры других классов, которые необходимо сохранить. Те классы, которые я сделал Parselable, и именно при их восстановлении я получаю ошибку.

Я видел сообщения об этой ошибке, но все они были для передачи данных между приложениями и необходимости использовать другой ClassLoader. Это все одно и то же приложение. Нужно ли устанавливать мой ClassLoader, потому что это в GLSurfaceView? Как мне найти ClassLoader, который мне нужен?

1 Ответ

5 голосов
/ 14 марта 2012

обновите ваш FlowManager(Parcel in) как показано ниже:

private FlowManager(Parcel in) {
    mConnection = new Connection();

    mState = State.valueOf(in.readString());
    mSplash = in.readParcelable(SplashScreen.class.getClassLoader());
    mMenu = in.readParcelable(MainMenu.class.getClassLoader());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...