2016-02-28 7 views
0

Я новичок в firebase и Json, поэтому у меня есть некоторые основные проблемы. Мой файл Json в Firebase построен так:Получение объектов из 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" 

Вы можете сделать некоторые мгновенные вещи с этой структурой:

Допустим, вы хотите, чтобы включить жим лежа как в тяжелой груди, и свет обратно тренировками , Эта структура позволяет повторно использовать ваши элементы.

Через год вы хотите изменить название скамьи на пресс-скамье SUPER DUPER. Вы просто изменить название: в element_id_0 и попадет в место

Вы можете легко запросить, которые включают в себя тренировки element_id_1, Свисающих гантели пресс

Вы можете легко изменить название вашей тренировки. Вместо Light Back and Shoulders это может быть Light Lower Back and Shoulders с простое изменение одного дочернего узла.

Вам следует дополнительно рассмотреть, как вы хотите использовать свои данные; вам нужно найти все элементы, которые предназначены только для ног и создать тренировку на основе этих? Нужно ли запрашивать или добавлять дополнительные данные?

Чтобы распечатать все имена категорий тренировки:

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

Firebase является NoSQL базы данных и как таковая не должны рассматриваться как нормализованная база данных SQL.

To ove rsimplify вы храните данные так, как вы хотите получить данные, даже если это означает сохранение одних и тех же данных в разных местах.

Если вы хотите получить список тренировок, имейте объект имен тренировок, который содержит только имена тренировок (например, тяжелый сундук и руки, светлые спины и плечи). Затем, если вы хотите получить дочерние элементы, сделайте это с другого объекта, который соответствует тому, что вы указали в вопросе.

good reading, чтобы цементировать эту идею.