Как добавить данные в массив в Firebase?
у меня есть массив называется subscribedTo
в моем узле пользователей. Теперь я хочу добавить некоторые push ID's
этого массива всякий раз, когда пользователь подписан.
но push ID
заменяются вместо добавления.
как я могу добавить идентификатор push к массиву?
- схемы
"tester@gmail,com": {
"email": "tester@gmail,com",
"hasLoggedInWithPassword": true,
"name": "tester",
"subscribedTo": [
"-KFPi5GjCcGrF-oaHnjr"
],
"timestampJoined": {
"timestamp": 1459583857967
}
}
код
public void onSubscribe(View v) {
final Firebase firebaseRef = new Firebase(Constants.FIREBASE_URL);
final HashMap<String, Object> userMap = new HashMap<String, Object>();
pushIDList.add(PROG_ID);
userMap.put("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo",
pushIDList);
firebaseRef.updateChildren(userMap, new Firebase.CompletionListener() {
@Override
public void onComplete(FirebaseError firebaseError, Firebase firebase) {
Toast.makeText(ProgramDetail.this, "You are subscribed", Toast.LENGTH_SHORT).show();
}
});
}
1 ответов
когда вы называете updateChildren()
С картой Firebase берет каждый ключ и заменяет объект в этом месте значением с карты.
документация Firebase на updateChildren()
говорит об этом:
учитывая один ключевой путь, как
alanisawesome
,updateChildren()
только обновляет данные на первом дочернем уровне, и любые данные, переданные за пределами первого дочернего уровня, рассматриваются как операция setValue ().
так что в вашем случае, вы замена все содержимое "/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo"
.
решение: либо сделать PROG_ID
часть ключа на карте:
userMap.put("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID, true);
firebaseRef.updateChildren(userMap, ...
или просто позвонить setValue()
в нижней части дерева JSON:
firebaseRef.child("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID).setValue(true);
вы заметите, что в обоих случаях я избавился от вашего массива в пользу рекомендуемая структура для такого так называемого индекса:
"subscribedTo": {
"-KFPi5GjCcGrF-oaHnjr": true
},