我有多个日期存储与每个键,在用户ID在“用户情绪”的父。
"Users Mood" : {
"K2ngvpioRUYF4bRM07Da5cbAjE53" : { //This is user ID
"-M3jNjCuGdMCwt1Czpwz" : { //This is key
"Date" : "2020-3-30",
"Scale" : "3"
},
"-M3jQWxm7z0EQYgkVenX" : { //This is key
"Date" : "2020-3-29",
"Scale" : "4"
},
"-M5hxn-rCJICUvRcMZJu" : { //This is key
"Date" : "2020-4-24",
"Scale" : "2"
}
}
}
所有的日期(2020-3-30,2020-3-29,2020-4-24)都应该在日历中标记。我使用了来自https://github.com/Applandeo/Material-Calendar-View的第三方日历
下面是我想出的方法,但是存储的日期没有在日历中标记。
userMoodRef=FirebaseDatabase.getInstance().getReference().child("Users Mood").child(user.getUid());
CalendarView calendarView = (CalendarView) findViewById(R.id.calendar);
List<EventDay> events = new ArrayList<>();
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Calendar calendar = Calendar.getInstance();
ArrayList<String> dates= new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String date=ds.child("Date").getValue(String.class);
dates.add(date);
}
for(String date : dates){
String[] items1 = date.split("-");
int year= Integer.parseInt(items1[0]);
int month=Integer.parseInt(items1[1]);
int day=Integer.parseInt(items1[2]);
calendar.set(year,month,day);
events.add(new EventDay(calendar, R.drawable.ic_dot_blue_24dp));
calendarView.setEvents(events);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
userMoodRef.addListenerForSingleValueEvent(eventListener);
请指导我解决这个问题。谢谢。
2条答案
按热度按时间pw9qyyiw1#
f2uvfpb92#
日历日历= Calendar.getInstance();在循环calendarView.setEvents(events)中调用此行;在for循环之外调用它。