PreferenceManager.getDefaultSharedPreferences使应用程序崩溃

时间:2018-10-09 13:20:26

标签: android

public class User extends Activity implements UserI {   

    private SharedPreferences sharedPref;
    private Context mcontext;
    private boolean isNotificationsOn;


    public User(Context context) {

                mcontext = context;

                Load();
        }

    public void Load () {

       //app crashes 
       sharedPref = PreferenceManager.getDefaultSharedPreferences(mcontext);

       isNotificationsOn = sharedPref.getBoolean("switch_recieveNotifications", false);

       }
}


public class SettingsActivity extends 
AppCompatPreferenceActivity {

    ...

    public static class GeneralPreferenceFragment extends 
    PreferenceFragment {

      ...

    }
}

大家好,

我是一名新的android应用程序开发人员,非常感谢您的帮助。

我的应用程序每次调用都崩溃: PreferenceManager.getDefaultSharedPreferences(上下文)。

阅读一些相关的答案后,我尝试了不同的策略,例如:

  • 将上下文作为getApplicationContext()传递
  • 将上下文传递给构造函数
  • 在SettingsActivity中创建一个GetContext()函数以返回其上下文
  • 在返回其上下文的静态类GeneralPreferenceFragment中创建GetContext()函数

全部产生相同的结果-崩溃的应用

我迷路了:/很想获得您的见识

1 个答案:

答案 0 :(得分:1)

活动是上下文,它表示视图的控制器。 因此,您的加载应该在onCreate或onResume方法中进行。

然后,您的上下文应为关键字“ this”。您还应该考虑将其命名为UserActivity,这样很明显您在做什么。最后,在Java或Kotlin中,我们从小写的方法名称开始。

@Override
public void onCreate(Bundle savedInstanceState) {
    load()
}
private void load(){
        sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
       isNotificationsOn = sharedPref.getBoolean("switch_recieveNotifications", false); 
}

这将使您再次运行。然后确保您正确地开始活动,而不是尝试构建自己的构造函数。只需使用

startActivity(this, new Intent(this, UserActivity));