无法从 Android 复选框首选项中查询值
Failed to query value from Android Checkbox Preference
下面有两个activity。
看我的代码...
SettingsActivity.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);
}
}
}
MainActivity.java
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,所以它没有崩溃。但是每次我点击按钮,它都会显示 "Failed to query"。
这是怎么回事?请帮忙!!!
您正在使用 SettingsActivity.checkBoxPreference
意味着 checkBoxPreference
当前是一个 static
字段,它既不指向任何 preference
也不知道它的行为。它仅使用字段声明。
我通常使用以下模式来完成
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
使用
检索CheckBoxPreference
sharedPrefs.getBoolean("checkPref", false));
我建议您通常遵循 this 示例。
我猜异常是因为SettingsActivity.checkBoxPreference为null,尝试去掉这个Try-Catch,你会发现真正的异常
下面有两个activity。 看我的代码...
SettingsActivity.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);
}
}
}
MainActivity.java
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,所以它没有崩溃。但是每次我点击按钮,它都会显示 "Failed to query"。
这是怎么回事?请帮忙!!!
您正在使用 SettingsActivity.checkBoxPreference
意味着 checkBoxPreference
当前是一个 static
字段,它既不指向任何 preference
也不知道它的行为。它仅使用字段声明。
我通常使用以下模式来完成
SharedPreferences sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
使用
检索CheckBoxPreference
sharedPrefs.getBoolean("checkPref", false));
我建议您通常遵循 this 示例。
我猜异常是因为SettingsActivity.checkBoxPreference为null,尝试去掉这个Try-Catch,你会发现真正的异常