从Firebase(Json)获取对象

时间:2016-02-28 22:16:58

标签: android json firebase

我是firebase和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" ]
  }
}

首先,我想要列出所有锻炼的清单,该清单将包含重型胸部和手臂"," Light Back和肩膀"。在那之后,我想把这些列表中的所有元素(孩子?),示例" Bench press"," Incline Dumbell press"我试了好几次几个小时,现在正在尝试这个:

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


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


            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });

2 个答案:

答案 0 :(得分: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,Incline哑铃按压

您可以轻松更改锻炼的名称。而不是Light Back和Shoulders,它可以是Light Lower Back和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
});

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

答案 1 :(得分:0)

Firebase是NoSQL数据库,因此不应被视为规范化的SQL数据库。

过度简化以您想要检索数据的方式存储数据,即使这意味着在不同的地方保存相同的数据。

如果您想要检索锻炼列表,请使用仅包含锻炼名称的锻炼名称对象(例如,重胸和手臂,浅背和肩膀)。然后,如果要检索子元素,请从另一个与问题中提供的对象匹配的对象执行此操作。

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