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