java—我试图传递一个包含arraylist和一些其他变量的对象

oyxsuwqo  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(285)

我试图在两个活动(游戏活动和暂停屏幕活动)之间传递一个可包裹的对象,因为我需要保存和恢复屏幕上敌人的位置、分数和计时器。现在,当我这么做的时候,我得到了分数和计时器,但不是敌人。我调整了一下,发现敌方类中的位图可能有问题,所以我用包含位图位置的字符串解决了这个问题。现在我有一些其他的事情要处理,我把这些事情都归结为我做了一个包裹,把这个包裹的东西放在这个包裹里,然后把它交给另一个活动。现在,我只知道 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"); . 我会感谢所有的帮助,提前谢谢。

ufj5ltwl

ufj5ltwl1#

从bundle#getparcelable文档
注意:如果期望值不是android平台提供的类,则必须调用 setClassLoader(java.lang.ClassLoader) 用合适的 ClassLoader 第一。否则,此方法可能会引发异常或返回 null .
我经常看到人们推荐的方法(这比搞乱类加载器要简单一些!)只是把它作为一个额外的目的:

Intent intent = new Intent(GameActivity.this, PauseScreenActivity.class);
gameState = new GameState(new ArrayList<>(customGameView.getEnemies()), score, timeLeftInMillis, xPosition, yPosition);
intent.putExtra("gameState", gameState);
startActivity(intent);

然后把它拆开

gameState = getIntent().getParcelableExtra("gameState");

哪个更友好
如果这不起作用,你可能想张贴你的 GameState 类和堆栈跟踪异常,以便人们可以看到发生了什么

相关问题