Nullpointerexception和onPause():一个谜

时间:2011-06-30 01:55:20

标签: android

我正在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对象的方法。调试器显示游戏为空,但是当我在关闭它之前能够正确地与游戏交互时,我看不出这是怎么回事。 :/

2 个答案:

答案 0 :(得分:0)

尝试使用onSaveInstanceState代替onPause

答案 1 :(得分:0)

经过多次研磨,我认为我已经解决了这个问题。我假设在更改活动时游戏实例会持续存在。它没有,所以这就是Android继续抛出Nullpointer的原因。我会启动应用程序,退出它(导致它保存到内部存储),然后当我再次尝试保存它时,它将无法正常工作。

我通过将游戏变成单身来解决这个问题,从而在各种活动中保持其状态。我承认我并不真正理解为什么这样可行或它是如何工作的,但它确实有效。如果我听起来很模糊和迷茫,那是因为我。 :P

修复的灵感来自here