【问题标题】:Writing array in Firebase android在 Firebase android 中写入数组
【发布时间】:2016-03-10 17:09:18
【问题描述】:

我正在尝试将其写入我的 Firebase

父母

--0 : 约翰

--1 : 提姆

--2 : 山姆

--3 : 本

我正在这样做

String[] names = {"John","Tim","Sam","Ben"};
myFirebaseRef.setValue(names);

它什么也没写。

使用 Firebase 的 Chrome 控制台工作。

这不是您将数组写入 firebase 的方式吗?

谢谢

【问题讨论】:

    标签: java android firebase


    【解决方案1】:
    List sendingList = new ArrayList<>(Arrays.asList(SendingArray));
    

    如果出现任何错误,请按 Alt+Enter。它将根据您的 android studio 版本进行更正

    【讨论】:

      【解决方案2】:

      我不确定Java,但是对于Web应用程序,您可以使用以下内容:

      我想创建一个可重用的函数来添加/保存根节点下的任何对象(即使该对象内的任何级别都有数据数组)。所以我想出了这个。 (我不确定是否符合最佳实践,但它工作得非常顺利)

          SaveWholeData: function(sKey, oVal, bGenKey) {
              bGenKey = bGenKey === undefined ? true: bGenKey;
              var oOriginalProperty = angular.copy(oVal);
              for (var property in oVal) {
                  if (oVal.hasOwnProperty(property) && oVal[property] instanceof Array) {
                      console.log(property);
                      oVal[property] = "$|$";
                  }
              }
              var sOwnRef = SaveDataByKey(sKey, oVal, bGenKey);
              for (var property in oVal) {
                  if (oVal.hasOwnProperty(property) && oVal[property] === "$|$") {
                      oVal[property] = oOriginalProperty[property];
                      var updatedReference = sOwnRef + "/" + property;
                     SaveWholeData(updatedReference, oVal[property], false);
                  }
              }
              return true;
          },
          SaveDataByKey: function(sKey, oVal, bGenKey) {
              if (bGenKey) {
                  var newPostKey = firebase.database().ref(sKey).push().key;
                  oVal.genKey = newPostKey;
                  firebase.database().ref(sKey).child(newPostKey).set(oVal);
                  return sKey + "/" + newPostKey;
              }else{
                  firebase.database().ref(sKey).set(oVal);
                  return sKey;
              }
          }
      

      所以要在根users添加新用户,您调用:

      SaveWholeData("users", oUserInfo, true);
      

      更新现有用户

      SaveWholeData("users"+"/"+ oUserInfo.genKey, oUserInfo, true);
      

      【讨论】:

        【解决方案3】:

        .setValue() 方法需要 List 而不是 Array

        native types accepted by this method 的值对应于 JSON 类型:Boolean、Long、Double、Map、String、Object、List、Object...

        Firebase ref = new Firebase("<my-firebase-app>/names"):
        String[] names = {"John","Tim","Sam","Ben"};
        List nameList = new ArrayList<String>(Arrays.asList(names));
        // Now set value with new nameList
        ref.setValue(nameList);  
        

        但是,我建议使用Map 而不是List。您可以使用名称作为键,而不是使用基于索引的键 (1,2,3...),这样更容易检索。

        Firebase ref = new Firebase("<my-firebase-app>/names"):
        HashMap<String, String> names = new HashMap()<String, String>;
        names.put("John", "John");
        names.put("Tim", "Tim");
        names.put("Sam", "Sam");
        names.put("Ben", "Ben");
        ref.setValue(names);
        

        现在如果你想检索数据,你只需要知道名字。

        Firebase ref = new Firebase("<my-firebase-app>/names"):
        Firebase johnRef = ref.child("john");
        johnRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
               System.out.println(snapshot.value); // the String "John"
            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
        
            }
        });
        

        Read the Firebase docs for more information.

        【讨论】:

        • 谢谢你的回答,这会保存为 0: John, 1: Tim... 还是 John:John, Tim:Tim...?
        • 这个答案包含了我一直在寻找的大部分信息。谢谢大卫!
        • 你好@David East 谢谢你的回答,我需要更多关于firebase实时数据库中数组的信息,我想执行删除字符串并将新字符串添加到现有数组中
        • 这个答案救了我的工作!!非常感谢!
        猜你喜欢
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        相关资源
        最近更新 更多