2016-02-28 125 views
0

我是firebase和Json的新手,因此对它有一些基本的麻烦。在火力地堡我的JSON文件是建立这样的:从Firebase获取对象(Json)

{ 
    "workout" : { 
    "Heavy Chest and Arms" : [ "Bench press", "Incline Dumbbell Press", "Cable Crossover", "Bicep Barbell Curls", "Alternate Dumbbell Curls", "Preachers Curls", "V-Bar Triceps Extensions", "Skull Crushers", "Sitting Calf raises" ], 
    "Light Back and Shoulders" : [ "Pull Ups", "Chins", "Cable Rows", "Lateral Pulldowns", "Dumbbell Rows", "Reverse Flies", "Arnold Press", "Side Raises", "Front Raises", "Rotary Cuffs" ] 
    } 
} 

首先,我想离开所有的锻炼列表,该列表将包含重胸部和手臂”,‘光的背部和肩膀’那我以后。想要得到所有元素的列表(孩子?),如“卧推”,“斜哑铃按”等我试了好几次了几个小时,现在这个实验:

myFirebaseRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 


       List<String> messages = dataSnapshot.getValue(); 


      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 
+1

我认为JSON结构会给你带来悲伤。将实际的数据结构粘贴到您的问题中通常是一个好主意,这样我们就可以获得清晰的图像。您可以转到Firebase信息中心并选择右上角的导出数据选项 - 然后打开下载的文件并复制/粘贴到您的问题中。 – Jay

回答

2

这里有一个更好的结构,让你去

workouts 
    workout_id_0 
    category: "Heavy Chest and Arms" 
    elements 
     element_id_0: true 
     element_id_1: true 
    workout_id_1 
    category: "Light Back and Shoulders" 
    elements 
     element_id_0: true 

elements 
    element_id_0 
    name: "Bench press" 
    description: "While laying flat on your back, arms at 90 degrees etc" 
    element_id_1 
    name: "Incline Dumbbell Press" 
    description: "Incline the backboard 30 degrees and etc etc" 

你可以做一些活泼的事情与此结构:

说你想在这两个沉重的箱子和轻背部锻炼卧推。这种结构可以让你重新使用你的元素。

从现在起一年后,您希望将Bench press的名称更改为Bench Press SUPER DUPER。您只需更改姓名:element_id_0内,并落入地方

您可以轻松地查询该训练包括element_id_1,该斜哑铃卧推

你可以很容易地改变你的锻炼的名称。只需更换一个孩子节点,而不是轻背靠背,它可以是轻的背部和肩部。

你应该进一步考虑你想如何使用你的数据;你是否需要找到所有适合腿部的元素并根据这些元素创建锻炼?你需要查询或添加额外的数据?

要打印出所有的锻炼类别名称:

ref.on("child_added", function(snapshot, prevChildKey) { 
    var workout = snapshot.val(); 
    console.log("Category: " + workout.category); 
    //the element references are here too! elements = workout.elements 
}); 

这将需要一些代码来获取每个锻炼元素的名称,但是这应该让你去。

0

火力地堡是一个NoSQL的数据库,因此不应该像标准化的SQL数据库那样对待。

To ove简化您以您想要检索数据的方式存储数据,即使这意味着将相同的数据保存在不同的位置。

如果您想检索锻炼列表,请制作一个锻炼名称对象,其中只包含锻炼名称(例如重型胸部和手臂,腰部和背部)。然后,如果您想要检索子元素,请从与您在问题中提供的内容相匹配的其他对象执行此操作。

一些good reading来巩固这个想法。