java - 如何在取消按钮上清除时间选择器的共享首选项?
问题描述
我正在开发一个项目,其中我有两个按钮和一个文本视图(布局中),用于设置通知、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();
解决方案
请尝试使用此代码来存储、获取和清除 sharedpreferencees 数据
我们在这个方法中传递了两个参数 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();
推荐阅读
- r - 如何从数据框的引用构建公式?
- php - 从数据库中删除文件或照片时如何从文件夹中删除文件或照片?
- ssl - Windows 中的 RabbitMQ SSL 支持
- vim - 如何在关闭语法突出显示的情况下启动 vim?
- excel - vba 括号
- google-app-engine - Apache Beam/Google Dataflow - 将数据从 Google Datastore 导出到 Cloud Storage 中的文件
- javascript - 为什么结果是这样的
- sql-server - SSRS 如何处理正在创建的额外行
- java - 将外部文本数据索引到 GraphDB 中的 lucene 索引
- acumatica - 导航到网格上的下一页不会刷新数据