2016-02-28 267 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來鞏固這個想法。