use*_*240 9 arrays android firebase firebase-realtime-database
我subscribedTo在用户节点中调用了一个数组.现在我想在push ID's订阅用户时向该数组添加一些内容.
但是push ID正在被替换而不是被追加.
如何将推送ID附加到阵列?
架构
"tester@gmail,com": {
"email": "tester@gmail,com",
"hasLoggedInWithPassword": true,
"name": "tester",
"subscribedTo": [
"-KFPi5GjCcGrF-oaHnjr"
],
"timestampJoined": {
"timestamp": 1459583857967
}
}
Run Code Online (Sandbox Code Playgroud)
码
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
当您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, ...
Run Code Online (Sandbox Code Playgroud)
或者只是setValue()在JSON树中的较低位置调用:
firebaseRef.child("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID).setValue(true);
Run Code Online (Sandbox Code Playgroud)
你会注意到,在这两种情况下,我都摆脱了你的数组,转而支持这种所谓索引的推荐结构:
"subscribedTo": {
"-KFPi5GjCcGrF-oaHnjr": true
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11061 次 |
| 最近记录: |