2015-12-05 8 views
9

Ich versuche, diese auf meine FirebaseWriting-Array in Firebase android

Eltern

--0 zu schreiben: John

--1: Tim

--2: Sam

--3: Ben

ich diesen

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

Und es schreibt nichts.

Es funktioniert mit der Chrome-Konsole für Firebase.

Ist das nicht die Art, wie Sie ein Array zu Firebase schreiben?

Dank

Antwort

17

Die .setValue() Methode ein List braucht nicht ein Array.

The native types accepted by this method für den Wert entsprechen die JSON-Typen: Boolean, Lange, Double, Karte, String, Object, List, Objekt ...

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); 

Aber ich empfehlen die Verwendung von a Map anstelle von List. Anstatt einen indexbasierten Schlüssel (1,2,3 ...) zu verwenden, können Sie den Namen als Schlüssel verwenden, damit er einfacher abgerufen werden kann.

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); 

Und jetzt, wenn Sie die Daten abrufen möchten, müssen Sie nur den Namen wissen.

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

Danke für die Antwort, wird dies als 0 sparen: John, 1: Tim ... oder John: John, Tim: Tim ...? –

+0

Danke.wirklich hilfreich –

+0

Diese Antwort enthielt die meisten Informationen, nach denen ich gesucht habe. Danke David! –

0

Ich bin nicht sicher über Java, sondern auch für Web-Anwendung, können Sie etwas wie folgt verwenden:

Ich wollte eine wiederverwendbare Funktion erstellen jedes Objekt unter einem hinzuzufügen/zu speichern Root-Knoten (auch wenn das ein Array von Daten auf einer beliebigen Ebene innerhalb des Objekts hat). Also habe ich das erfunden. (Ich bin nicht sicher, ob entspricht den besten Praktiken, aber es funktionierte ziemlich glatt)

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; 
     } 
    } 

So zu neuen Benutzer unter root hinzufügen users, rufen Sie:

SaveWholeData("users", oUserInfo, true); 

und Update bestehende Benutzer:

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