Java 无法从Android复选框首选项查询值
下面我有两个活动。 查看我的代码 设置活动.javaJava 无法从Android复选框首选项查询值,java,android,button,checkboxpreference,Java,Android,Button,Checkboxpreference,下面我有两个活动。 查看我的代码 设置活动.java public class SettingsActivity extends AppCompatPreferenceActivity { static CheckBoxPreference checkBoxPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
public class SettingsActivity extends AppCompatPreferenceActivity {
static CheckBoxPreference checkBoxPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
checkBoxPreference = (CheckBoxPreference)findPreference("checkPref");
setupActionBar();
}
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
}
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (SettingsActivity.checkBoxPreference.isChecked()){
Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Not Checked", Toast.LENGTH_SHORT).show();
}
} catch (Exception e){
Toast.makeText(MainActivity.this, "Failed to query", Toast.LENGTH_SHORT).show();
}
}
});
}
}
MainActivity.java
public class SettingsActivity extends AppCompatPreferenceActivity {
static CheckBoxPreference checkBoxPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
checkBoxPreference = (CheckBoxPreference)findPreference("checkPref");
setupActionBar();
}
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
}
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (SettingsActivity.checkBoxPreference.isChecked()){
Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Not Checked", Toast.LENGTH_SHORT).show();
}
} catch (Exception e){
Toast.makeText(MainActivity.this, "Failed to query", Toast.LENGTH_SHORT).show();
}
}
});
}
}
正如我在这里使用的Try Catch一样,它不会崩溃。但每次我点击按钮,它都会显示“查询失败”
这里怎么了?请帮忙您正在使用
设置活动。checkBoxPreference
意味着checkBoxPreference
当前是一个静态
字段,它既不指向任何首选项
,也不知道其行为。它只使用字段声明
我通常用下面的模式来做
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
使用
sharedPrefs.getBoolean("checkPref", false));
我建议您一般遵循示例。我猜发生异常是因为SettingsActivity。checkBoxPreference为空,请尝试删除此try-Catch,您将找到真正的异常