- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我尝试调用云函数并传递一些数据。我的数据类型为 Map<String, Object>
里面又嵌套了一些 Map<String, Object>
.当试图用这个调用我的函数时:
getHttpsCallable(function).call(data)...
我收到这个错误:
Cloud Function Exception:
java.lang.IllegalArgumentException: Object cannot be encoded in JSON: [Ljava.util.Map;@42896770
at com.google.firebase.functions.Serializer.encode(Serializer.java:136)
at com.google.firebase.functions.Serializer.encode(Serializer.java:77)
at com.google.firebase.functions.FirebaseFunctions.call(FirebaseFunctions.java:255)
at com.google.firebase.functions.FirebaseFunctions.access$100(FirebaseFunctions.java:34)
at com.google.firebase.functions.FirebaseFunctions$2.then(FirebaseFunctions.java:233)
at com.google.firebase.functions.FirebaseFunctions$2.then(FirebaseFunctions.java:225)
at com.google.android.gms.tasks.zzd.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5653)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
当打印我的数据对象时,它看起来像这样:
{items=[Ljava.util.Map;@42896770, element1=OzNGHzHeq6av03hRmMJ6, time=Sun May 05 04:40:00 MEZ 3918}
我尝试了以下方法:我尝试在我的数据对象中打包一个数组而不是一个 Map。 => 没有用。
我试过自己将数据转成json发送,还是不行。
我做了以下工作:
Gson gson = new Gson();
String dataJSON = gson.toJson(data);
结果是一个格式良好的 JSON:
{"items":[{"count":1,"itemId":"94To3bKnxoWzayLdy55I"},{"count":3,"itemId":"fkNtIUxbfg5GhLJy2Dma"},{"count":1,"itemId":"sDYTp7cpQTRfWuI6CSaK"},{"count":1,"itemId":"qGGl5U0qihHnMzhBMjyb","options":["2.0","1.0","1.1","0.0"]},{"count":1,"itemId":"qGGl5U0qihHnMzhBMjyb","options":["2.0","1.0","1.1","0.1"]},{"count":1,"itemId":"qGGl5U0qihHnMzhBMjyb","options":["2.0","1.0","1.1","0.2"]},{"count":1,"itemId":"qGGl5U0qihHnMzhBMjyb","options":["2.3","1.0","1.1","0.1"]}],"storeId":"OzNGHzHeq6av03hRmMJ6","pickupTime":"May 5, 3918 4:40:00 AM"}
但我也尝试使用硬编码的 JSON 调用我的函数,但这也不起作用。
我不知道我做错了什么。有人知道吗?
最佳答案
问题是你实际上传递了 array
的 Map
对象。
由于 Frederik Byl 展示了 Functions SDK for Android 的源代码,它不接受数组类型。它接受 Map
或 List
Java 集合对象。
所以你必须改变你的[Ljava.util.Map;
至 List<Map>
类型。
此外,Firestore 实际上使用 Protobuf对于核心数据集。您可以在 here 找到更多信息。他们如何使用 Protobuf 数据编码或解码 json。
关于android - Firebase:将数据传递给 cloudfunction 导致:对象无法在 JSON 中编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138130/
我正在尝试通过云代码删除文件。但是这个脚本失败了: Parse.Cloud.define("deleteFile1", function(request, response) { Pars
自 0.2.0 版 cloud_functions 开始,Flutter 使用 .getHttpsCallable() 而不是 .call()。新方法定义为: /// @param functionN
我正在尝试向设备在 firebase 数据库中拥有的所有用户发送通知,但它在云函数的寄存器中显示:“ReferenceError:值未定义”。 应该做的是:每次在“通知”中进行更改时,您必须获取更改的
我需要一些帮助。 我的项目有 2 个集合,一个称为“产品”,另一个称为“用户”。 我将所选产品信息复制到用户的子集合中作为收藏夹,在本例中: 用户(集合)> 用户(文档)> 收藏夹(集合)> 产品(文
我需要一些帮助。 我的项目有 2 个集合,一个称为“产品”,另一个称为“用户”。 我将所选产品信息复制到用户的子集合中作为收藏夹,在本例中: 用户(集合)> 用户(文档)> 收藏夹(集合)> 产品(文
我正在使用云功能通过设备 token 发送通知。 const payload: admin.messaging.MessagingPayload = { notificatio
我有一个包含下一项的集合,其中一个属性是日期: id: xxxxxx name: xxxx date: August 21, 2018 at 1:00:00 AM UTC+8 (timestamp
我正在尝试实现一个可以运行 ffmpeg 的 Cloudfunction在谷歌存储桶上传。我一直在玩基于 https://kpetrovi.ch/2017/11/02/transcoding-vide
给定一些通用的 Python 代码,结构如下...... cloudbuild.yaml requirements.txt functions/ folder_a/ test/
我尝试调用云函数并传递一些数据。我的数据类型为 Map里面又嵌套了一些 Map .当试图用这个调用我的函数时: getHttpsCallable(function).call(data)... 我收到
我们有单独的 GCP 项目用于“构建”和“生产”环境。我想将 Cloud Build 用于“build”项目以在“prod”项目中部署 Cloud Function。跟随 documentation
我正在尝试从 Firebase 云功能访问我的存储 但我无法访问它 它给了我 类型错误:storage.ref 不是函数 这是我的代码 const functions = require('fireb
我在尝试使用以下方法部署谷歌云 HTTP 函数时刚开始遇到错误: gcloud functions deploy http_function --trigger-http 现在我收到这样的错误: ER
我有两个收藏。一个是 jobs,另一个是 users。 用户可以选择喜欢的类别名称。我存储在 User 集合中...在 job 中,我使用 categoryName 存储所有类别。 当向job 和这个
如何将 admin.firestore.FieldValue.serverTimestamp() 传递给 update() 方法? 我想将其插入到一个数组中,如下所示: import * as fun
我是一名优秀的程序员,十分优秀!