0

私は単純な目覚まし時計アプリを開発しており、アラームの設定中に OnSharedPreferenceChangeListener を使用して変更を表示しています。以下に含まれるコード。問題: アプリは次の行でクラッシュします。

//SharedPreferences etPrefs=PreferenceManager.getDefaultSharedPreferences(getBaseContext());

そして、私はその理由を見つけることができません。奇妙なことに、すべてが大学で機能しましたが、同じバージョンの Eclipse を使用して自宅でプロジェクトを開くと、前述の行 o_0 でクラッシュします。何か提案はありますか?

public class NewAlarm extends PreferenceActivity implements
    OnSharedPreferenceChangeListener {
private Button btnCancel, btnSave;
private TimePicker tp;
private TextView txtDate;
private DigitalClock dc;
private SimpleDateFormat sdf = new SimpleDateFormat("EEEE, dd MMM");
SharedPreferences getPrefs = PreferenceManager
        .getDefaultSharedPreferences(getBaseContext());

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.new_alarm_prefs);
    setContentView(R.layout.new_alarm);
    setupRefs();
    tp.setIs24HourView(true);
    dc.setBackgroundColor(Color.parseColor("#14B909"));
    dc.setTextColor(Color.parseColor("#FFFFFF"));
    txtDate.setText("Today is: " + sdf.format(new Date()));
}

public void setupRefs() {
    btnCancel = (Button) findViewById(R.id.btnCancelNewAlarm);
    txtDate = (TextView) findViewById(R.id.txtDate);
    tp = (TimePicker) findViewById(R.id.tp);
    dc = (DigitalClock) findViewById(R.id.dc);
}

@Override
protected void onResume() {

    super.onResume();

    getPrefs.registerOnSharedPreferenceChangeListener(this);

    onSharedPreferenceChanged(getPrefs, "Repeat_PREFS");

    onSharedPreferenceChanged(getPrefs, "et_PREFS");

    btnCancel.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            finish();

        }
    });

    btnSave = (Button) findViewById(R.id.btnSaveNewAlarm);
    btnSave.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

        }
    });

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    getPrefs.unregisterOnSharedPreferenceChangeListener(this);

}

public void onSharedPreferenceChanged(SharedPreferences getPrefs, String key) {

    Preference pref = findPreference(key);

    if (pref instanceof ListPreference) {
        ListPreference listPref = (ListPreference) pref;
        pref.setSummary(listPref.getEntry().toString());
    }
    if (pref instanceof EditTextPreference) {
        EditTextPreference etPref = (EditTextPreference) pref;
        pref.setSummary(etPref.getText());
    }

}

}

4

1 に答える 1

3

これをグローバルに宣言し、

SharedPreferences getPrefs = null;

そして、 onCreate() 内でこれを行います。

 getPrefs = PreferenceManager
        .getDefaultSharedPreferences(this);

これは、 Context がのみで開始され、onCreate()その前に null になり、それが問題の原因となっているためです。

于 2012-10-19T11:11:54.310 に答える