【问题标题】:SharedPreferences troublesome nullpointerexceptionSharedPreferences 麻烦的 nullpointerexception
【发布时间】:2012-11-16 17:28:44
【问题描述】:

(删除了帖子的旧内容)

编辑#2:好的,现在我很清楚是编辑器试图达到导致空指针异常的首选项。这里有关于如何修复它的帮助吗?

这是更新的活动:

     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(); 编辑:是 sharedPreferences 导致 nullpointerexception,而不是编辑器。

编辑器似乎无法访问首选项:this.sharedPreferences = getPreferences(MODE_PRIVATE);

知道如何解决这个问题吗?

【问题讨论】:

  • 您是否为首选项文件声明了名称?
  • 我不这么认为。我在哪里做呢?
  • 从哪里调用writeSettings?也许您的活动上下文在被调用时已经消失了。
  • 能否贴出完整的异常输出日志?
  • 更新了问题。似乎编辑器无法达到偏好,这就是导致nullpointerexception 的原因。不过,我不知道如何解决它。

标签: android nullpointerexception sharedpreferences android-preferences


【解决方案1】:

看起来像声明

编辑器编辑器;

应该是

SharedPreferences.Editor 编辑器;

【讨论】:

  • 我相信这与例外无关。编辑器与 SharedPreferences.Editor 相同。这是似乎为空的偏好。这就是我想要的答案。为什么会变成空?
  • 所以你的 sharedPreferences 为空,不是吗?我复制你的代码减去 gamePanel 并且运行它没有问题。也许你应该检查你的游戏面板。
  • 嗯,运行它应该没有问题,因为还没有尝试到达 sharedPreferences。我尝试将对 writeWin 和 writeFail 函数的调用放在活动的停止和暂停函数中,但最终出现相同的异常。尝试在 onStop 函数内部调用 writeWin(); writeFail(); 调用,您会看到退出应用时会出现错误。
【解决方案2】:

我终于通过使用监听器解决了这个问题!它显然是在活动内部为空的游戏面板。点击这里了解更多信息: nullpointerexception when trying to reach activity

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 2011-07-21
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    相关资源
    最近更新 更多