【发布时间】:2018-08-27 17:13:16
【问题描述】:
我正在尝试制作一个待办事项列表,每次用户选中一个复选框时,它都会在相应的日期添加一个真/假。问题是firebase不排序日期字符串,所以经过一些研究我发现我必须使用timeInMillis,但Firebase不允许字符串以外的键......
这就是我检索日期的方式..
habitosQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mHabitosList.clear();
for (DataSnapshot habitosSnapshot : dataSnapshot.getChildren()) {
Habitos habitos = habitosSnapshot.getValue(Habitos.class);
Checks = habitos.getChecks();
Map<String, Boolean> sortedChecks = new TreeMap<>(Checks);
List<Map.Entry<String, Boolean>> entryList =
new ArrayList<>(sortedChecks.entrySet());
Map.Entry<String, Boolean> lastEntry =
entryList.get(entryList.size() - 1);
try {
lastDateEntry = sdf.parse(lastEntry.getKey());
} catch (ParseException e) {
e.printStackTrace();
}
Date today = focus.getToday();
int diffLastToday = focus.daysBetween(lastDateEntry, today);
for (int x = 0; x < diffLastToday; x++) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(lastDateEntry);
calendar.add(Calendar.DAY_OF_MONTH, +1);
Checks.put(sdf.format(calendar.getTimeInMillis()), false);
}
habitos.setChecks(Checks);
mHabitosList.add(habitos);
mHabitosAdapter.notifyDataSetChanged();
habitosQuery.child(habitos.getHabitosId()).child("checks").setValue(Checks);
}
【问题讨论】:
-
我并不真正理解使用时间(以毫秒为单位)作为键的问题。不能用字符串来表示吗?
-
你是对的,你只是在long值的末尾添加一个+“”,但是现在另一个问题突然出现了,你如何获得更新值的特定键?,因为时间戳是不断变化的