0

(拆卸該職位的舊內容)SharedPreferences麻煩NullPointerException異常

編輯#2:好了,現在我很清楚地表明它試圖達到引起NullPointerException異常偏好的編輯器。如何解決它的任何幫助?

這裏是更新的活動:

 public SharedPreferences sharedPreferences; 
Editor editor; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // requesting to turn the title OFF 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // making it full screen 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    // set our MainGamePanel as the View 
    setContentView(new MainGamePanel(this)); 

// Restore preferences 

     this.sharedPreferences = getPreferences(MODE_PRIVATE); 
     this.editor = sharedPreferences.edit(); 

     try { 
     int wins = GetPreferences("wins"); 
     int fails = GetPreferences("fails"); 
     gamePanel.winn = wins; 
     gamePanel.failn = fails; 
     } catch (NullPointerException npe) { 
      Log.d(TAG, "Nothing to load"); 
     } 

    //INIT SOUND 
    mSoundManager.initSounds(getBaseContext()); 
    //SOUNDS 
    mSoundManager.addSound(1, R.raw.draw); 
    mSoundManager.addSound(2, R.raw.cheer); 
    mSoundManager.addSound(3, R.raw.boo); 

} 

@SuppressWarnings("deprecation") 
@Override 
public void onBackPressed() 
{ 
    super.onBackPressed(); 
    if (gamePanel.gamei==true) { 
     gamePanel.back(); 
    } else if (gamePanel.menui==true) { 
     finish(); 
     System.runFinalizersOnExit(true); 
     System.exit(0); 
    } 
} 

public void onPause() 
{ 
    super.onPause(); 
    //KILL ALL 
    finish(); 
    System.runFinalizersOnExit(true); 
    System.exit(0); 
} 

@Override 
protected void onStop(){ 
    super.onStop(); 
    //KILL ALL 
    finish(); 
    System.runFinalizersOnExit(true); 
    System.exit(0); 
} 

public int GetPreferences(String key) { 
    return sharedPreferences.getInt(key, 0); 
} 

public void SavePreferences(String key, int value) { 
editor.putInt(key, value);  
editor.apply(); 
} 

public void writeWin() { 
    SavePreferences("wins", gamePanel.winn); 
} 
public void writeFail() { 
    SavePreferences("fails", gamePanel.failn); 
} 

編輯器是什麼原因造成的NullPointerException異常:this.editor = sharedPreferences.edit();編輯:這是造成nullpointerexception,而不是編輯器的sharedPreferences。

看起來編輯器無法達到首選項:this.sharedPreferences = getPreferences(MODE_PRIVATE);

關於如何解決這個問題的任何想法?

+0

你有沒有爲你的偏好文件聲明一個名字? –

+0

我不這麼認爲。我在哪裏做? –

+0

從哪裏調用'writeSettings'?也許你的活動環境在它被調用的時候已經消失了。 – Tim

回答

0

看起來像聲明

Editor editor;

應該是

SharedPreferences.Editor編輯器;

+0

我相信這與例外無關。編輯器與SharedPreferences.Editor相同。這是偏好似乎爲空。這就是我想要的答案。爲什麼它變爲空? –

+0

所以它是你的sharedPreferences是空的,不是嗎?我複製你的代碼減去gamePanel,並沒有任何問題運行它。也許你應該檢查你的gamePanel。 –

+0

那麼運行它應該沒有問題,因爲沒有任何設法到達sharedPreferences。我試着將調用writeWin和writeFail函數放入活動的停止和暫停函數中,但它以相同的異常結束。嘗試在onStop函數內部調用'writeWin();'writeFail();'調用,您將看到退出應用程序時會出現錯誤。 –