我试图在两个活动(游戏活动和暂停屏幕活动)之间传递一个可包裹的对象,因为我需要保存和恢复屏幕上敌人的位置、分数和计时器。现在,当我这么做的时候,我得到了分数和计时器,但不是敌人。我调整了一下,发现敌方类中的位图可能有问题,所以我用包含位图位置的字符串解决了这个问题。现在我有一些其他的事情要处理,我把这些事情都归结为我做了一个包裹,把这个包裹的东西放在这个包裹里,然后把它交给另一个活动。现在,我只知道 ClassNotFoundException when unmarshalling
错误。这是我正在使用的代码:
暂停时的第一个活动
Intent intent = new Intent(GameActivity.this, PauseScreenActivity.class);
Bundle b = new Bundle();
gameState = new GameState(new ArrayList<>(customGameView.getEnemies()), score, timeLeftInMillis, xPosition, yPosition);
b.putParcelable("gameState", gameState);
intent.putExtra("bundle", b);
startActivity(intent);
第二个活动检索数据
Bundle b = getIntent().getBundleExtra("bundle");
gameState = b.getParcelable("gameState");
发送回数据的第二个活动
Intent intent = new Intent(PauseScreenActivity.this, GameActivity.class);
Bundle b = new Bundle();
b.putParcelable("gameState", gameState);
intent.putExtra("bundle", b);
startActivity(intent);
检索数据的第一个活动
Bundle b = getIntent().getBundleExtra("bundle");
gameState = b.getParcelable("gameState");
现在错误来自第二个活动的oncreate b.getParcelable("gameState");
. 我会感谢所有的帮助,提前谢谢。
1条答案
按热度按时间ufj5ltwl1#
从bundle#getparcelable文档
注意:如果期望值不是android平台提供的类,则必须调用
setClassLoader(java.lang.ClassLoader)
用合适的ClassLoader
第一。否则,此方法可能会引发异常或返回null
.我经常看到人们推荐的方法(这比搞乱类加载器要简单一些!)只是把它作为一个额外的目的:
然后把它拆开
哪个更友好
如果这不起作用,你可能想张贴你的
GameState
类和堆栈跟踪异常,以便人们可以看到发生了什么