Запись массива в Firebase android

Я пытаюсь записать это в свою Firebase

Родитель

- 0: Джон

- 1: Tim

- 2: Сэм

- 3: Бен

Я делаю это

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

И он ничего не пишет.

Он работает с помощью консоли Chrome для Firebase.

Разве это не так, как вы пишете массив в firebase?

Спасибо

Ответ 1

Для метода .setValue() требуется List, а не Array.

родные типы, принятые этим методом для значения соответствуют типы 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) {

    }
});

Подробнее читайте в документах Firebase.

Ответ 2

Я не уверен в Java, но для веб-приложения вы можете использовать что-то следующим образом:

Я хотел создать функцию многократного использования для добавления/сохранения любого объекта под корнем node (даже если у него есть массив данных на любом уровне внутри объекта). Поэтому я придумал это. (Я не уверен, что соответствует лучшим практикам, но он работал довольно гладко)

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

Итак, чтобы добавить нового пользователя под root users, вы вызываете:

SaveWholeData("users", oUserInfo, true);

и обновить существующий пользователь:

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

Ответ 3

List sendingList = new ArrayList<>(Arrays.asList(SendingArray));

В случае любой ошибки нажмите Alt + Enter. Это исправит это в зависимости от вашей версии андроид студии