【问题标题】:Nullpointerexception and onPause(): a mysteryNullpointerexception 和 onPause():一个谜
【发布时间】:2011-06-30 01:55:20
【问题描述】:

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

【问题讨论】:

  • 嗨,游戏对象是否有可能为空......因为如果您在Data data = game.writeProtoBuf(); 中遇到异常,则表示游戏为空......
  • 我们需要查看更多您的代码。

标签: android


【解决方案1】:

尝试使用onSaveInstanceState 代替 onPause

【讨论】:

  • 我尝试了onSaveInstanceState,但是当我按下home键时应用仍然抛出NullPointerException。
【解决方案2】:

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

我通过将 Game 变成一个单例来解决这个问题,从而在活动中保持其状态。我承认我真的不明白为什么会这样或它是如何工作的,但它确实有效。如果我听起来真的很模糊和困惑,那是因为我是。 :P

修复的灵感来自here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多