首页 > 解决方案 > 如何在取消按钮上清除时间选择器的共享首选项?

问题描述

我正在开发一个项目,其中我有两个按钮和一个文本视图(布局中),用于设置通知、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();

标签: javaandroidandroid-studiosharedpreferencestimepicker

解决方案


请尝试使用此代码来存储、获取和清除 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();

推荐阅读