GVKun编程网logo

如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库

28

在这篇文章中,我们将为您详细介绍如何使用Hashmap在FirebaseFirestoreAndroid中添加/更新/删除数组元素?商店数据库的内容。此外,我们还会涉及一些关于Androidfireb

在这篇文章中,我们将为您详细介绍如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库的内容。此外,我们还会涉及一些关于Android firebase firestore&functions pushNotification 使用 fcm 令牌错误、Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?、android – Firebase Firestore – 或查询、android – Firebase分析事件未显示在firebase控制台上的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库

如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库

我想收集一个用户,用户将有多个商店作为文档,每个文档都有storeName,storeAddress和字段availableProducts。我的问题是如何管理availableProducts数组?我知道Firestore无法处理数组,我应该使用HashMap。我的可用产品可能具有产品名称,产品价格等字段。我是Firebase的新手,如何availableProduct在Android Studio中使用Java管理数组?

答案1

小编典典

编辑:2018年9月12日

从开始August 28, 2018,现在可以更新数组成员。更多信息在这里。

如何在Firebase Firestore中添加/更新/删除数组元素?

简短的答案是您不能!如关于数组的官方文档中所示:

尽管Cloud Firestore可以存储阵列,但可以it does not support查询阵列成员或更新单个阵列元素。

因此,当前无法在Cloud Firestore数据库中添加,更新或删除单个数组元素。

看您的数据库架构,我可以说您没有任何数组。availableProducts是一个对象,它下面有一个名为地图0,其保持两个String属性,spName和spPrice。如果要更新,假设价格,请使用以下代码:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();DocumentReference ref = rootRef.collection("gdgsghs.cok").document("Shsheg");Map<String, Object> availableProducts = new HashMap<>();Map<String, Object> zeroMap = new HashMap<>();Map<String, Object> product = new HashMap<>();product.put("spPrice", 63.121);zeroMap.put("0", product);availableProducts.put("availableProducts", zeroMap);ref.set(availableProducts, SetOptions.merge());

您的价格将从更新67.368为63.121。

答案2

小编典典

好消息,随着数组的最新改进,您可以添加,更新和删除数组元素。

查看此博客文章:Cloud Firestore中的更好的阵列!

你可以这样

//Map to add user to arrayfinal Map<String, Object> addUserToArrayMap = new HashMap<>();addUserToArrayMap.put("arrayOfUsers", FieldValue.arrayUnion(mAuth.getCurrentUser().getUid()));//Map to remove user from arrayfinal Map<String, Object> removeUserFromArrayMap = new HashMap<>();removeUserFromArrayMap.put("arrayOfUsers", FieldValue.arrayRemove(mAuth.getCurrentUser().getUid()));//use either maps to add or remove userdb.collection("REFERENCE").document("mDocumentId")                .update(addUserToArrayMap);

Android firebase firestore&functions pushNotification 使用 fcm 令牌错误

Android firebase firestore&functions pushNotification 使用 fcm 令牌错误

如何解决Android firebase firestore&functions pushNotification 使用 fcm 令牌错误?

升级项目后,我一整天都在研究 firebase 功能, 我想要的是将通知推送到 firestore 文档用户的令牌,

这是我的数据库结构

EX:当集合Visitor doc改变时,推送消息到doc里面的token

enter image description here

enter image description here

exports.vsUp = functions.firestore.document("Visitor/{docId}").onUpdate(
    (snapshot,context) => {
        admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get().then(
            result => {
                var registrationTokens = [];
                result.docs.forEach(
                    tokenDocument => {
                        registrationTokens.push(tokenDocument.data().token);
                    }
                );
                admin.messaging().sendMulticast({
                    tokens: registrationTokens,notification: {
                        title: snapshot.data().visitor_name,body: snapshot.data().visitor_status
                    }
                })
            }
        )
    }

这是我现在的functions.js代码,但它不起作用,

怎样才能实现我想做的事? 谢谢>3

解决方法

这条线不起作用:

signer

此处的 admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get() 位仅被解释为文字字符串。由于没有具有该名称的集合/文档,因此您不会得到任何结果。

如果您想为请求中指定的用户加载所有令牌,它看起来像这样:

{token}

所以你可以看到:

  • 这使用 admin.firestore().collection(`Visitor/${context.params.docId}/token`).get() 来标记字符串,以便 JavaScript 将其解释为模板。您无需在第一行执行此操作,因为在您部署 Cloud Function 时 Firebase 本身会对其进行解释。
  • 路径现在由三部分组成,因此它指向一个集合,而不是代码中的四部分,这意味着它指向一个文档。
  • 我们使用 ` 来获取触发 Cloud Function 的 ${context.params.docId} 的值。

请注意,消息未传送到设备的原因可能有很多,但这些绝对是您的代码未从 Firestore 读取任何内容的部分原因。

Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?

Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?

如何解决Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践??

Android 上的基本用户登录/注册场景,使用 viewmodel 处理 LiveData。我使用 Firebase Auth 进行身份验证,使用 Cloud Firestore 用于 Cloud DB 和 Firebase Storage 用于存储图像。假设在注册期间用户提供了个人资料图片,我带来的工作流程是:(注册)

  • firebaseAuth.createuserWithEmailAndPassword()
  • 将图片保存到存储并获取下载地址
  • 将用户数据放入 Cloud Firestore 数据库(以图片 url 作为字段)
  • 更新 firebase 用户的 photoUrl 字段
  • 使用登录用户更新 viewmodel

这些任务按此特定顺序依次执行,以实现对数据库的持久性。 一个任务(第一个任务除外)仅在前一个任务成功完成(使用 OnSuccessListener)后运行,如果其中任何一个任务失败,则删除 firebase 用户,并且 viewmodel 更新错误。 这个实现的问题是非常慢,因为每个任务都需要等待前一个任务完成,这会减慢注册实体的过程,但我认为这是必要的,以避免非持久性数据(例如,图像可能未加载但用户保存在云 Firestore 中,然后 viewmodel 更新,但没有图像导致空指针异常 ecc...)。所以我要问的是:有更好的方法来处理这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

android – Firebase Firestore – 或查询

android – Firebase Firestore – 或查询

如何通过一个字段的多个值获取数据?例如,我有包含帖子的数据库,我想查询blogId为1或2的所有帖子,按时间戳排序.

collection("posts").whereEqualTo("blogId","1")
.whereEqualTo("blogId",2).orderBy("timestamp",Query.Direction.DESCENDING).limit(50)

上面的代码不起作用:(

怎么做到这一点?
问候 :)

解决方法

我找不到任何有关OR条件的OR的能力的文档.但您可以在blogId上重写您的要求,如下所示:

WHERE blogId > 0 AND blogId < 3

试试这段代码:

collection("posts")
.where("blogId",">","0")
.where("blogId","<","3")
.orderBy("timestamp",Query.Direction.DESCENDING)
.limit(50)

android – Firebase分析事件未显示在firebase控制台上

android – Firebase分析事件未显示在firebase控制台上

我在我的应用程序中实现了firebase分析,但没有显示任何事件或登录fire base console.

在onCreateView()方法的每个片段中添加波纹管代码.

private void addFragmentInFirebaseAnalytics() {

    FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(getContext());
    FragmentItem fragmentItem = new FragmentItem();
    fragmentItem.setFragmentId(Constant.FM_ID_MOIST_AIR);
    fragmentItem.setFragmentName(MoistAirActivity.class.getSimpleName());

    Bundle bundle = new Bundle();
    bundle.putInt(FirebaseAnalytics.Param.ITEM_ID,fragmentItem.getFragmentId());
    bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,fragmentItem.getFragmentName());

    //Logs an app event.
    firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT,bundle);
    Log.d(TAG,"bundle >>"+bundle);
}

使用的依赖是:

compile ''com.google.firebase:firebase-core:9.4.0''

用过的插件:

apply plugin: ''com.google.gms.google-services''

它的工作正常并在调试控制台中显示这样的日志,

09-14 12:30:42.967 D/FA      ( 8821): Logging event (FE): select_content,Bundle
[{_o=app,_ev=item_id,item_name=MoistAirActivity,content_type=Navigation Menu,_err=4}]
09-14 12:30:42.977 V/FA      ( 8821): Using measurement service
09-14 12:30:42.977 V/FA      ( 8821): Connecting to remote service
09-14 12:30:43.217 D/FA      ( 8821): Connected to remote service
09-14 12:30:43.217 V/FA      ( 8821): Processing queued up service tasks: 1
09-14 12:30:43.217 E/FA      ( 8821): Task exception on worker thread: java.lang
.IllegalStateException: FirebaseApp with name [DEFAULT] doesn''t exist. : com.goo
gle.android.gms.measurement.internal.zzt.zzEd(UnkNown Source)
09-14 12:30:48.217 V/FA      ( 8821): Inactivity,disconnecting from AppMeasurem
entService

但是24小时后没有在调试控制台和firebase控制台中显示任何上传消息,

那么,这里有什么不对吗?请帮忙.

解决方法

最后我通过替换工具解决了这个问题:node =“replace”to tools:node =“merge”并在menifest文件中添加工具:replace =“android:label”.

参考:FirebaseApp with name [DEFAULT] doesn’t exist

关于如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android firebase firestore&functions pushNotification 使用 fcm 令牌错误、Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?、android – Firebase Firestore – 或查询、android – Firebase分析事件未显示在firebase控制台上的相关知识,请在本站寻找。

本文标签: