我正在Android上编写游戏,这个问题让我很难过。我重写onPause()以使游戏在不再可见时将其数据保存到内部存储。它可以正常工作,直到三次或四次按下或回家。我得到了这个:
Thread [<1> main] (Suspended (exception NullPointerException))
Main.onPause() line: 127
Main(Activity).performPause() line: 3842
Instrumentation.callActivityOnPause(Activity) line: 1190
ActivityThread.performPauseActivity(ActivityThread$ActivityRecord, boolean, boolean) line: 3335
ActivityThread.performPauseActivity(IBinder, boolean, boolean) line: 3305
ActivityThread.handlePauseActivity(IBinder, boolean, boolean, int) line: 3288
ActivityThread.access$2500(ActivityThread, IBinder, boolean, boolean, int) line: 125
BinderProxy(ActivityThread$H).handleMessage(Message) line: 2044
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
调试器声明它会爆炸:
@Override
public void onPause() {
super.onPause();
Data data = game.writeProtoBuf(); // NullPointerException
try {
//IO stuff
writeProtoBuf实际上并没有写任何东西,只是一种检索游戏数据并将其放入Data对象的方法。调试器显示游戏为空,但是当我在关闭它之前能够正确地与游戏交互时,我看不出这是怎么回事。 :/
答案 0 :(得分:0)
尝试使用onSaveInstanceState代替onPause
答案 1 :(得分:0)
经过多次研磨,我认为我已经解决了这个问题。我假设在更改活动时游戏实例会持续存在。它没有,所以这就是Android继续抛出Nullpointer的原因。我会启动应用程序,退出它(导致它保存到内部存储),然后当我再次尝试保存它时,它将无法正常工作。
我通过将游戏变成单身来解决这个问题,从而在各种活动中保持其状态。我承认我并不真正理解为什么这样可行或它是如何工作的,但它确实有效。如果我听起来很模糊和迷茫,那是因为我。 :P
修复的灵感来自here。