2011-06-30 45 views
0

我在Android上編寫遊戲,這個問題困擾了我。我重寫onPause()以使遊戲在數據不可見時將其數據保存到內部存儲。它工作正常,直到三次或四次按回或回家。我得到這個代替:Nullpointerexception和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實際上並沒有寫任何東西,但僅僅是一個檢索遊戲數據,並把它放入方法數據對象。調試器顯示遊戲爲空,但我沒有看到在關閉遊戲之前我可以正確地與遊戲進行交互的可能性。 :/

+0

嗨,有沒有可能,遊戲對象可以爲空....因爲如果你在'Data data = game.writeProtoBuf(); '意味着它是遊戲是空的... – Dinash

+1

我們需要看到更多的代碼。 –

回答

0

多少牙齒研磨後,我覺得已經摸索出了問題。我假設遊戲實例在改變活動時會持續存在。它並沒有,所以這就是爲什麼Android不斷拋出Nullpointer。我會啓動應用程序,退出它(導致它保存到內部存儲器),然後當我試圖再次保存它時,它將無法工作。

我解決了這個問題,把遊戲變成了一個單身人士,從而保持了它在活動中的狀態。我承認我不明白爲什麼這個工作或它的工作原理,但它的工作原理。如果我聽起來很模糊和困惑,那是因爲我。 :P

該修復的啓示來自here

0

嘗試使用onSaveInstanceState代替的onPause

+0

我試過onSaveInstanceState,但是當我按下home時,該應用仍然拋出了NullPointerException。 – colig