2012-03-13 8 views
0

私は小包(バンドルで保存)から自分のアプリケーションを復元しようとしています。ClassNotFoundException小包を読むとき

私のアクティビティはOpenGLを使用しているため、このサーフェスビューを作成し、アプリケーションの保存時または復元時にこれらの関数を呼び出します。 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クラスを保存する必要がある他のクラスのインスタンスを持っているでmRenderer

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

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

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); 
    } 
} 

。私がParselableにしたクラスは、それらを復元するときにエラーが発生します。

私はこのエラーに関する記事を見ましたが、それらはすべてアプリケーション間でデータを送信し、別のClassLoaderを使用する必要がありました。これはすべて同じアプリです。これはGLSurfaceViewにあるため、ClassLoaderを設定する必要がありますか?私が必要とするClassLoaderを見つけるにはどうすればいいですか?

+0

** mSplash **何ですか?あなたは 'FlowManager'クラス全体をペーストできますか? – waqaslam

+0

' FlowManager'にさらに追加しました。完全なクラスは無関係のコードがたくさんあるので非常に長くなります。 mSplashはもう一つのクラスです。 'publicクラスSplashScreen extends BasicScreen extends Parcelable' – EmbMicro

答えて

5

以下のようにあなたの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()); 
} 
関連する問題