使用registerOnSharedPreferenceChangeListener

时间:2016-01-13 13:36:33

标签: java android android-studio nullpointerexception

我已经拿起了别人的代码,并且终于能够让它工作了!现在,我正在处理我的应用的PreferencesActivity。根据他的代码,另一个人在onSharedPreferenceChangeListener中设置onResume()并将onPause()中的 protected void onResume(){ super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause(){ super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } 移除,如下所示:

NullPointerException

它产生错误PreferenceFragment并且它也被弃用了。我会将它与我的move_uploaded_file($_FILES['fileToUpload']['name'], $target_dir);一起使用,但我想知道为什么这个代码在那里,它可能是什么用途以及如何修复它并让它工作。

1 个答案:

答案 0 :(得分:0)

似乎问题是由使用自定义类(仅理论)引起的。匿名使用代码中的接口(而不是在主类中实现它)似乎解决了这个问题。

SharedPreferences.OnSharedPreferenceChangeListener prefListener = 
        new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs,
            String key) {
        if (key.equals("date")) {
        }
    }
};
preferences.registerOnSharedPreferenceChangeListener(prefListener);

请注意:重要的是pref listener变量是一个类字段而不是局部变量,以防它被垃圾收集。

Source部分答案)