2013-02-26 136 views
0

我一直在盯着这段代码现在一段时间,我不能看到我出错的地方。我正在尝试执行仅在首次运行的应用程序上运行的覆盖活动。preferences.getBoolean导致崩溃

我得到一个空指针异常。

任何帮助将不胜感激。

我的onCreate():

公共类MainActivity延伸活动{ SharedPreferences偏好; 查看topLevelLayout;

@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); 
    } 

而且isFirstTime方法:

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; 
} 
+0

你需要看看'PreferenceManager.getDefaultSharedPreferences(此);'因为它返回null,这就是为什么你得到一个NPE。 – Eluvatar 2013-02-26 18:25:11

回答

2

尝试让喜好这样

preferences =getSharedPreferences("yourpreferencename", 0); 

PreferenceManager.getDefaultSharedPreferences(this);返回null

+0

它实际上似乎topLevelLayout为null。 'topLevelLayout.setVisibility(View.VISIBLE);'现在正在造成坠机。我不明白为什么。它在上面的行中被声明。 – L337BEAN 2013-02-26 18:38:05

+0

请发布堆栈跟踪,以便我们可以找到它的原因.. – Pragnani 2013-02-26 18:41:53

+1

你打电话给'findViewById',但你传递布局 – Eluvatar 2013-02-26 18:41:56