Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从Android复选框首选项查询值_Java_Android_Button_Checkboxpreference - Fatal编程技术网

Java 无法从Android复选框首选项查询值

Java 无法从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);

下面我有两个活动。 查看我的代码

设置活动.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();
            }
        }
    });
}

}
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,您将找到真正的异常