java - 布尔设置器和获取器在按钮单击时不更新?
问题描述
所以我目前正在开发一个日期 android 应用程序,现在我在这里所做的是创建一个称为similarDatesFunction
此函数的简单算法,负责检索数据并将其与用户输入进行匹配,每次匹配都会放置一个计数器,如果超过 6计数器也称为offPeak
变量,它将在我的CalendarValidation.setDateFlag();
设置器上设置一个错误的布尔值。现在我将这个设置器调用/获取到另一个函数中,在该函数verifyValidations
中我检查对象是否携带一个false
或true
值。现在这可行,但是有一个我无法弄清楚的问题。
当我运行android应用程序并输入详细信息时,它将根据我的firebase数据库在同一日期内找到3个用户的匹配项并返回false(这很好),但是当我更改日期然后按下按钮时我得到相同的消息是它无法预订并且仍然设置为假,但是如果我再次按下它,它会预订假期(知道日期是新的并且尚未在数据库中)并且现在设置为真,这反之亦然。本质上,布尔值不是在重置,而是在单击下一个按钮时继续?
我的代码:
public void verifyValidations() {
//boolean sameDate = CalendarValidation.isSameDateFlag();
CalendarInfo ci = new CalendarInfo();
//store start dates fields individually
String startYearData = ci.getStartDateYear();
String startMonthData = ci.getStartDateMonth();
String startDayData = ci.getStartDateDay();
String startWeekData = ci.getStartDateWeek();
String totalDateCode = startYearData + startMonthData + startDayData + startWeekData;
//store end dates fields individually
String endYearData = ci.getEndDateYear();
String endMonthData = ci.getEndDateMonth();
String endDayData = ci.getEndDateDay();
String endWeekData = ci.getEndDateWeek();
String endTotalDateCode = endYearData + endMonthData + endDayData + endWeekData;
String fullDate = totalDateCode + endTotalDateCode;
sameDatesFunction(totalDateCode,endTotalDateCode);
if (!CalendarValidation.isSameDateFlag()){
displayText.setText("No slots between these dates, choose another.");
} else if (CalendarValidation.isSameDateFlag()){
displayText.setText("Holiday is available, booking successful.");
}
}
public void sameDatesFunction (final String startCode, final String endCode) {
final int offPeak = 6;
FirebaseFirestore db = FirebaseFirestore.getInstance();
final Query query = db.collection("holidays").whereEqualTo("startDateReference",startCode);
query.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
//creating a map to obtain information
Map<String, Object> test = new HashMap<>();
//counter
int similarStartEndCounter = 0;
int userNameCounter = 0;
boolean flag = false;
//retrieve data as a hashmap document
for (QueryDocumentSnapshot documentSnapshot: queryDocumentSnapshots){
Note data = documentSnapshot.toObject(Note.class);
test.put("startDateReference", data.getStartDateReference());
test.put("endDateReference", data.getEndDateReference());
Collection<Object> values = test.values();
//retrieve results as single values
for (Object string : values) {
if ((string.equals(startCode)) || (string.equals(endCode)) ) {
similarStartEndCounter++;
}
}
}
if (similarStartEndCounter >= offPeak) {
CalendarValidation.setSameDateFlag(false);
System.out.println("I am in sameDates as false");
} else {
System.out.println("I am in sameDates as true");
CalendarValidation.setSameDateFlag(true);
}
}
});
}
日历验证.java
public class CalendarValidation {
public static boolean sameDateFlag;
public static boolean isSameDateFlag() {
return sameDateFlag;
}
public static void setSameDateFlag(boolean sameDateFlag) {
CalendarValidation.sameDateFlag = sameDateFlag;
}
public static boolean isSimilarFutureFlag() {
return similarFutureFlag;
}
public static void setSimilarFutureFlag(boolean similarFutureFlag) {
CalendarValidation.similarFutureFlag = similarFutureFlag;
}
public static boolean isSimilarPastFlag() {
return similarPastFlag;
}
public static void setSimilarPastFlag(boolean similarPastFlag) {
CalendarValidation.similarPastFlag = similarPastFlag;
}
public static boolean similarFutureFlag;
public static boolean similarPastFlag;
}
解决方案
将此作为社区 Wiki 发布,因为它基于 @Tom 提供的评论。
问题是您正在执行一个操作以检查sameDateFlag
等待数据库结果更新它的线程之前的状态,当您再次单击它时,该线程将完成,这就是它工作的原因。
我建议您查看这个社区问题,了解如何使用以下方法正确处理对 Firestore 的同步调用OnSuccessListener
推荐阅读
- c++ - gdb:如何获得 std::vector 的最大值
? - docker - sed 操作在 Dockerfile 中被覆盖
- arrays - Slurm Array Job:可能在同一节点上输出文件?
- javascript - 显示 json 数据的问题
- bash - 安全 Bash 行继续
- grep - 使用 grep 仅检索另一个列表中的列表的匹配模式
- javascript - Vaadin 生成具有更改列名的网格
- rss - Rss 有效,但自引用与文档位置不匹配
- android - 在 Repository 和 ViewModel 之间共享相同的 MutableLiveData
- spring-boot - 带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载