我需要遍历Firebase架构以获取每个workouts
的数据并将其显示在RecyclerView中。
现在,我无法使用侦听器遍历Firebase中的Schema,也无法通过名为Program
的POJO类获取它。
Firebase的JSON
{
"subscriptions" : {
"han@gmail,com" : {
"-KDnhRwHjssOejrqyenP" : {
"category" : "Strength",
"goal" : "This workout can be done while on the phone!",
"length" : 1,
"title" : "Hello Workouts",
"weeks" : {
"week1" : [ "High Knees", "Jumping Jacks", "Wall sit", "Pushups", "Sit-ups", "Step ups", "Squats", "Tricep dips on chair", "Plank", "High Knees running in place", "Lunges", "Pushup and rotation", "Side plank (alternate per round)", "Alternating Push-Up Plank", "Chest Expander", "Diamond Push-ups", "Dive Bomber Push-ups", "Butt Kickers", "Lying Triceps Lifts", "One Arm Side Push-up", "Overhead Arm Clap", "Overhead Press", "Power Circles", "Push-up and Rotation", "T Push-ups", "Reverse Plank", "Spiderman Push-up", "T Raise", "Tricep Dips", "Wall Push-ups", "Wide Arm Push-ups", "Burpees" ]
}
},
"-KDni3TN4NMyGXePyp92" : {
"category" : "Strength",
"goal" : "This workout can be done by a BABUJI",
"length" : 1,
"title" : "Indian Workouts",
"weeks" : {
"week1" : [ "Diamond Pushups", "Jackknives", "Plyo Lunges", "Plyo Squats", "Single leg plank (alternate per round)", "Plyo Lunges", "Pushup and rotation", "Weighted side plank (alternate per round)", "Alternating Push-Up Plank", "Chest Expander", "Diamond Push-ups", "Dive Bomber Push-ups", "One Arm Side Push-up", "Overhead Press", "Push-up and Rotation", "T Push-ups", "Spiderman Push-up", "Wide Arm Push-ups", "Burpee Pushups" ]
}
}
},
"obama@gmsil,com" : {
"-KDnfjROKeFAL9wccsxY" : {
"category" : "Mobility",
"goal" : "afternoon body weight workout",
"length" : 1,
"title" : "Afternoon HiiT",
"weeks" : {
"week1" : [ "High Knees", "Squats", "Lunges", "Diamond Push-ups", "Lying Triceps Lifts" ]
}
},
"-KDps90Dn6XtJc6Co00b" : {
"category" : "Strength",
"goal" : "goal",
"length" : 1,
"title" : "title",
"weeks" : {
"week1" : [ "Diamond Pushups", "Jackknives", "Plyo Lunges", "Plyo Squats", "Single leg plank (alternate per round)", "Plyo Lunges", "Pushup and rotation", "Weighted side plank (alternate per round)", "Alternating Push-Up Plank", "Chest Expander", "Diamond Push-ups", "Dive Bomber Push-ups", "One Arm Side Push-up", "Overhead Press", "Push-up and Rotation", "T Push-ups", "Spiderman Push-up", "Wide Arm Push-ups", "Burpee Pushups" ]
}
}
}
}
}
侦听器代码
public void FB(){
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
System.out.println(postSnapshot.getValue());
//Program post = proSnapshot.getValue(Program.class);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
LOGCAT
03-28 08:52:53.966 23584-23584 / com.android.sam I / System.out:{-KDni3TN4NMyGXePyp92 = {weeks = {week1 = [Diamond Pushups,Jackknives,Plyo Lunges,Plyo Squats,单腿板(备用)每轮),Plyo刺针,俯卧撑和旋转,配重侧板(每轮备用),交替俯卧撑板,扩胸器,钻石俯卧撑,潜水轰炸俯卧撑,单臂俯卧撑,高架俯卧撑,俯卧撑和旋转,T俯卧撑,蜘蛛侠俯卧撑,宽臂俯卧撑,Burpee俯卧撑]},标题=印度锻炼,类别=力量,长度= 1,目标=此锻炼可以由BABUJI完成},-KDnhRwHjssOejrqyenP = {weeks = {week1 = [高膝盖,跳起的杰克,坐在墙壁上,俯卧撑,仰卧起坐,俯卧撑,下蹲,Tricep俯卧在椅子上,木板,高位膝盖就位,滑刺,俯卧撑和旋转,侧板(每轮交替),交替式俯卧撑板,扩胸器,菱形俯卧撑,潜水轰炸机俯卧撑,对接踢球,卧式三头肌举重,单臂侧俯卧撑,高架手臂拍打,高架俯卧撑,动力圈,猫h向上和旋转,T俯卧撑,反向木板,蜘蛛侠俯卧撑,T提升,三叉戟俯卧撑,墙壁俯卧撑,宽臂俯卧撑,Burbures]},标题=你好锻炼,类别=力量,长度= 1,目标=此锻炼可以在电话中完成!}}
03-28 08:52:53.967 23584-23584 / com.android.sam I / System.out:{-KDnfjROKeFAL9wccsxY = {weeks = {week1 = [高膝盖,下蹲,肺,钻石俯卧撑,卧式三头肌训练器]] },标题=下午HitT,类别=流动性,长度= 1,目标=下午体重锻炼},-KDps90Dn6XtJc6Co00b = {weeks = {week1 = [Diamond Pushups,Jackknives,Plyo Lunges,Plyo Squats,单腿木板(每人备用)圆形),Plyo刺,俯卧撑和旋转,配重侧板(每轮备用),交替俯卧撑板,扩胸器,菱形俯卧撑,潜水轰炸俯卧撑,单臂俯卧撑,高架俯卧撑,俯卧撑向上和旋转,T俯卧撑,蜘蛛侠俯卧撑,宽臂俯卧撑,Burpee俯卧撑]},标题=标题,类别=强度,长度= 1,目标=目标}}
程式库
public class Program {
private String title;
private String goal;
private String category;
private int length;
HashMap<String, ArrayList<String>> weeks;
/**
* Required public constructor
*/
public Program() {
}
public Program(String title, String goal, String category, int length, HashMap<String, ArrayList<String>> weeks) {
this.title = title;
this.goal = goal;
this.category = category;
this.length = length;
this.weeks = weeks;
}
public String getTitle() {
return title;
}
public String getGoal() {
return goal;
}
public String getCategory() {
return category;
}
public int getLength() {
return length;
}
public HashMap<String, ArrayList<String>> getweeks() {
return weeks;
}
}
最佳答案
正如@ReazMurshed所说的,您快到了。但是您无法在树中迭代一个级别。似乎ref指向JSON中的subscriptions
节点。在此之下,您拥有用户,然后有了推送ID。因此,您需要执行一个双循环:
ref.addListenerForSingleValueEvent(new ValueEventListener) {
public void onDataChange(DataSnapshot snapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot userSnapshot : snapshot.getChildren()) {
for (DataSnapshot programSnapshot : userSnapshot.getChildren()) {
Program program = programSnapshot.getValue(Program.class);
}
}
}
public void onCancelled(FirebaseError firebaseError) {
}
});