Android preferences.getBoolean导致崩溃

Android preferences.getBoolean导致崩溃,android,sharedpreferences,Android,Sharedpreferences,我已经盯着这个代码看了一段时间了,我看不出哪里出了问题。我正在尝试实现一个仅在第一次运行的应用程序上运行的覆盖活动 我得到一个空指针异常 任何帮助都将不胜感激 我的onCreate(): 公共类MainActivity扩展了活动{ 共享参考偏好; 查看顶层布局 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

我已经盯着这个代码看了一段时间了,我看不出哪里出了问题。我正在尝试实现一个仅在第一次运行的应用程序上运行的覆盖活动

我得到一个空指针异常

任何帮助都将不胜感激

我的onCreate():

公共类MainActivity扩展了活动{ 共享参考偏好; 查看顶层布局

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    topLevelLayout= findViewById(R.layout.activity_instructions);
    preferences = PreferenceManager.getDefaultSharedPreferences(this);

    if (isFirstTime()) {
        topLevelLayout.setVisibility(View.INVISIBLE);
    }
第一次的方法是:

private boolean isFirstTime()
{
    boolean ranBefore = preferences.getBoolean("RanBefore", false); // The program crashes here
    if (!ranBefore) {
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean("RanBefore", true);
        editor.commit();
        topLevelLayout.setVisibility(View.VISIBLE);
        topLevelLayout.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            topLevelLayout.setVisibility(View.INVISIBLE);
            return false;
            }
        });
    }
    return ranBefore;
}

尝试像这样获取首选项

 preferences =getSharedPreferences("yourpreferencename", 0);

您的
PreferenceManager.getDefaultSharedReferences(this);
返回null

您需要查看
PreferenceManager.getDefaultSharedReferences(this);
,因为它返回null,这就是您获得NPE的原因。实际上,topLevelLayout似乎为null。'topLevelLayout.setVisibility(View.VISIBLE)“;”现在导致了崩溃。我不明白为什么。它在上面的一行中被声明。你正在调用
findViewById
但是你正在传递一个layoutOk,我不完全理解为什么。我应该传递什么ID?@L337BEAN-你在你的activity\u main.xml中给topLevelLayout项的ID。如果它是
android:ID=“@+ID/top\u项”
在代码中的XML文件中,您将使用
findViewById(R.id.top_项);
@L337BEAN方法名称它自己建议findViewById,它将通过一个唯一id查找视图……当您设置ContentView(yourlayout)时,您的布局将被放大,并且已经存在的视图和视图可以通过R.java中已经生成的id进行标识