0

私は以下の2つの活動をしています。私のコードを参照してください...

設定Activity.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を使用したので、クラッシュしていません。しかし、ボタンをクリックするたびに、「クエリに失敗しました」と表示されます。

ここで何が問題なのですか?助けてください!!!

4

2 に答える 2

0

あなたが使用しているSettingsActivity.checkBoxPreference手段checkBoxPreferenceは現在、staticフィールドを指しておらpreferenceず、その動作を認識していません。フィールドの宣言のみを使用しています。

私は通常、次のパターンを使用してそれを行います

SharedPreferences sharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this);

CheckBoxPreferenceを使用して取得

sharedPrefs.getBoolean("checkPref", false));

一般的にこの例に従うことをお勧めします。

于 2016-03-15T00:52:51.700 に答える
0

SettingsActivity.checkBoxPreference が null であるため、例外が発生すると思います。この Try-Catch を削除してみてください。実際の例外が見つかります。

于 2016-03-15T01:07:18.090 に答える