Android 将字符串附加到Firebase实时数据库的列表中
我想在Firebase实时数据库的列表中添加一个字符串。 (我的代码已经运行,但存在问题) 因此,数据库如下所示:Android 将字符串附加到Firebase实时数据库的列表中,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想在Firebase实时数据库的列表中添加一个字符串。 (我的代码已经运行,但存在问题) 因此,数据库如下所示: message: 0: "some string" 1: "another string" 2: "some string" 但我认为这段代码的问题在于,如果有人读取了消息的数量,然后想写一条消息,那么当另一个用户同时写一条消息时,就会出现问题(因为消息的数量会发生变化) 在多用户Firebase中尝试使用顺序数字索引(通常也称为数组索引或自动增量值)是一
message:
0: "some string"
1: "another string"
2: "some string"
但我认为这段代码的问题在于,如果有人读取了消息的数量,然后想写一条消息,那么当另一个用户同时写一条消息时,就会出现问题(因为消息的数量会发生变化)
在多用户Firebase中尝试使用顺序数字索引(通常也称为数组索引或自动增量值)是一种反模式,原因如下
- 正如您已经注意到的,用户有可能会覆盖彼此的数据。但是,这是可以修复的,如果您需要基于现有值为值设置属性,那么这是一种方法。下面这个例子正是您所需要的:
Android中的语法稍微复杂一些,但工作原理相同// Increment Ada's rank by 1. var adaRankRef = firebase.database().ref('users/ada/rank'); adaRankRef.transaction(function(currentRank) { // If users/ada/rank has never been set, currentRank will be `null`. return currentRank + 1; });
- 当事务工作时,这意味着应用程序只有在用户连接到服务器时才能工作。当他们离线时,事务将失败
push()
final DatabaseReference myRef = database.getReference("message");
myRef.push().setValue("SOME STRING");
请注意,本主题已经介绍了很多内容,因此我建议您也可以查看:
- (具有Android的交易代码)
但是当我使用“push”时,当我想要读取字符串时,如何才能获得字符串的顺序?我不确定我是否理解你的意思。无论子节点是如何使用DataSnapshot.getKey()
生成的,您总是以相同的方式获取其密钥。但重要的区别在于,如果使用push()
,则不需要知道现有的键就可以生成新的/下一个键。如果要获取onDataChange中的所有键,则可以执行以下操作:for(DataSnapshot childSnapshot:DataSnapshot.getChildren(){System.out.println(childSnapshot.getKey());}
final DatabaseReference myRef = database.getReference("message");
myRef.push().setValue("SOME STRING");