Firestore– 如何从Android更新包含句点(.)的字段?

Firestore– 如何从Android更新包含句点(.)的字段?,第1张

概述更新包含句点(.)的字段未按预期工作.在docs中,可以通过提供点分隔的字段路径字符串或提供FieldPath对象来更新嵌套字段.所以,如果我有一个字段,它的关键是“com.example.android”我如何更新这个字段(来自Android)?在我的场景中,如果文档不存在,我将设置文档,否则更新文档.因此,第

更新包含句点(.)的字段未按预期工作.
在docs中,可以通过提供点分隔的字段路径字符串或提供FIEldpath对象来更新嵌套字段.
所以,如果我有一个字段,它的关键是“com.example.android”我如何更新这个字段(来自Android)?

在我的场景中,如果文档不存在,我将设置文档,否则更新文档.因此,第一组是创建包含上述句点的字段,然后尝试更新相同的字段,它创建具有嵌套字段的新字段,因为它包含句点.

db.collection(ID).document(uID).update(pkg, score)

解决方法:

发生这种情况是因为. (点)符号用作Cloud Firestore文档中存在的对象之间的分隔符.这就是你有这种行为的原因.要解决这个问题,请避免使用.对象键内的符号.因此,为了解决这个问题,您需要更改设置该密钥的方式.所以请更改以下密钥:

com.example.androID

com_example_androID

而且您将能够毫无问题地更新您的财产.这可以通过在向数据库添加数据时对密钥进行编码,以非常简单的方式完成.所以请使用以下方法对密钥进行编码:

private String encodeKey(String key) {    return key.replace(".", "_");}

而这种方法,解码密钥:

private String decodeKey(String key) {    return key.replace("_", ".");}

编辑:

根据您的评论,如果您有一个如下所示的密钥:

com.social.game_1

通过对密钥进行两次编码/解码,可以以非常简单的方式解决这种情况.首先将_转换为@,第二次编码.至 _.解码时,先解码_到.第二,解码@到_.我们来看一个非常简单的例子:

String s = "com.social.game_1";String s1 = encodeKeyOne(s);String s2 = encodeKeyTwo(s1);System.out.println(s2);String s3 = decodeKeyOne(s2);String s4 = decodeKeyTwo(s3);System.out.println(s4);

以下是相应的方法:

private static String encodeKeyOne(String key) {    return key.replace("_", "@");}private static String encodeKeyTwo(String key) {    return key.replace(".", "_");}private static String decodeKeyOne(String key) {    return key.replace("_", ".");}private static String decodeKeyTwo(String key) {    return key.replace("@", "_");}

输出将是:

com_social_game@1com.social.game_1 //The exact same String as the initial one

但请注意,这只是一个示例,您可以根据应用程序的用例对此密钥进行编码/解码.这是编码/解码字符串时非常常见的做法.

总结

以上是内存溢出为你收集整理的Firestore – 如何从Android更新包含句点(.)的字段?全部内容,希望文章能够帮你解决Firestore – 如何从Android更新包含句点(.)的字段?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存