Kotlin如何将ArrayList按原有顺序存入Firebase Realtime Database
问题原因
Firebase Realtime Database 对字符串类型的子节点键默认按字典序排序,你当前使用location${count+1}的命名规则,当计数超过10后,location10的字典序会排在location2之前(首位字符都是1,第二位0的字典序小于2),就会出现你看到的顺序错乱问题。
解决方案
你可以选择以下任意一种方式解决:
- 方案1:子节点键补前导零
给拼接键名的数字补固定位数的前导零,保证所有键名的数字部分位数一致,字典序就会和数字顺序保持一致。示例代码如下:
后续查询数据时调用// 补2位前导零,支持最多99个位置节点,数量更多可调整为%03d对应3位 val locationKey = "location%02d".format(count + 1) ref.child(pk).child(locationKey).setValue(locationList).addOnCompleteListener { Toast.makeText(requireContext() ,"success$pk", Toast.LENGTH_SHORT).show() }orderByKey()即可按顺序拿到节点:ref.child(pk).orderByKey().addListenerForSingleValueEvent(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { // 遍历snapshot.children即可拿到顺序正确的节点 } override fun onCancelled(error: DatabaseError) { // 异常处理逻辑 } }) - 方案2:新增显式排序字段
存入数据时额外加一个order字段存储序号,后续查询时按order字段排序,这种方式灵活性更高,后续需要调整节点顺序时直接修改order值即可,不需要改动节点键名。
内容的提问来源于stack exchange,提问作者user16493824
相关产品推荐
相关产品推荐

