[英]How to Clear shared Preference for a Time Picker on Cancel button?
我正在處理一個項目,我有兩個按鈕和一個文本視圖(在布局中),用於時間選擇器來設置通知、buttonTimepicker 和 buttonCancelAlarm。
我曾經保存時間,通過共享首選項在時間選擇器中選擇。 共享首選項工作正常。
但我面臨的問題是,當我點擊取消按鈕時,我的應用程序仍然向我顯示時間選擇器設置的通知,即使我已經實現了editor.clear();
單擊“取消”按鈕 Listner 時共享首選項。
當我刪除共享首選項時,它會正常工作,取消時間和通知。
在這里,我想要的是在“設置時間”按鈕上的共享首選項中保存時間,並在取消時間按鈕上清除共享首選項。
public class drvschedule extends AppCompatActivity implements
TimePickerDialog.OnTimeSetListener {
private TextView mTextView;
SharedPreferences myPrefdrv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drvschedule);
mTextView = findViewById(R.id.drtmslctd);
Button buttonTimePicker = findViewById(R.id.setdrvtm);
buttonTimePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timePicker = new TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "time picker");
}
});
Button buttonCancelTime = findViewById(R.id.cncldrvtm);
buttonCancelTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.clear();
editor.apply();
cancelAlarm();
}
});
myPrefdrv=getPreferences(MODE_PRIVATE);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
updateTimeText(c);
startAlarm(c);
}
private void updateTimeText(Calendar c) {
String timeText = "Notification set for Driving: ";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
timeText +=
DateFormat.getTimeInstance(DateFormat.SHORT).format(c.getTime());
}
mTextView.setText(timeText);
}
private void startAlarm(Calendar c) {
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1,
intent, 0);
if (c.before(Calendar.getInstance())) {
c.add(Calendar.DATE, 1);
}
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.apply();
alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
pendingIntent);
}
private void cancelAlarm() {
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1,
intent, 0);
alarmManager.cancel(pendingIntent);
mTextView.setText("Notification canceled");
}
}
//used to save preferences....
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.apply();
//used to clear preference....
SharedPreferences.Editor editor=myPrefdrv.edit();
editor.clear();
editor.apply();
請嘗試使用此代碼來存儲、獲取和清除共享首選項數據
我們在這個方法中傳遞了兩個參數 getsharedpreferences(String PREFS_NAME ,int mode )
PREFS_NAME 是文件的名稱。
mode 是操作模式。
存儲數據
SharedPreferences pref = getSharedPreferences("mypref", 0);
SharedPreferences.Editor editor = pref.edit();
editor.putString("deviceToc",token); // Storing string
editor.apply();
獲取數據
SharedPreferences sharedpreferences = getSharedPreferences("mypref", 0);
SharedPreferences prefs = sharedpreferences;
String string = prefs.getString("deviceToc", null);
清除數據
SharedPreferences sharedpreferences = getSharedPreferences("mypref", 0);
sharedpreferences.edit().clear().commit();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.