gpt4 book ai didi

java - 如何在“取消”按钮上清除时间选择器的共享首选项?

转载 作者:行者123 更新时间:2023-12-02 09:33:33 30 4
gpt4 key购买 nike

我正在开发一个项目,其中有两个按钮和一个 TextView (在布局中),用于时间选择器设置通知,按钮时间选择器和按钮取消警报。

我曾经保存时间,通过共享首选项在时间选择器中选择。共享首选项工作正常。

但我面临的问题是,当我单击“取消”按钮时,我的应用程序仍然向我显示时间选择器设置的通知,即使我已经在共享上实现了 editor.clear();单击“取消”按钮监听器时的首选项。

当我删除共享首选项时,它可以正常取消时间和通知。

在这里,我想要的是将时间保存在“设置时间”按钮上的共享首选项中,并在“取消时间”按钮上清除共享首选项。

 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();

关于java - 如何在“取消”按钮上清除时间选择器的共享首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748909/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com