在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错
Posted
技术标签:
【中文标题】在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错【英文标题】:Error while sending List data to cloud firestore using REST api in flutter 【发布时间】:2020-10-15 01:12:51 【问题描述】:我无法在 Flutter 中使用 REST api 将字符串列表发送到云 Firestore。
//###### here is my code ##########
Future<bool> addVisit(Visit visit) async //function
try
var response = await http.post( //post method to send data
"$VISIT_API",
headers:
"Authorization": "Bearer $Utils.loginToken",
在“Facility”之前工作正常,但在插入“Facility:因为所有其他都是字符串值并且 Facility 是 List 类型时出错”
body: json.encode(
"fields":
"status": "stringValue": visit.status,
"id": "stringValue": visit.id,
"name": "stringValue": visit.name,
"dateTime": "integerValue": visit.dateTime,
"mob": "integerValue": visit.mob,
"idproof": "integerValue": visit.idproof,
"address": "stringValue": visit.address,
"purpose ": "stringValue": visit.purpose,
"facility": "arrayValue": visit.facility //error line
,
),
);
print("reach");
if (response.statusCode == 200) // successful
print("visit added");
return true;
else
print(response.body);
catch (err)
throw err;
我会像这样进行后期请求
String VISIT_API =
"https://firestore.googleapis.com/v1/projects/<database-id>/databases/(default)/documents/visits";
错误信息在这里
//###### Error Message #########
I/flutter (26972): //console output
I/flutter (26972): "error":
I/flutter (26972): "code": 400,
I/flutter (26972): "message": "Invalid JSON payload received. Unknown name \"arrayValue\" at
'document.fields[8].value': Proto field is not repeating, cannot start list.",
I/flutter (26972): "status": "INVALID_ARGUMENT",
I/flutter (26972): "details": [
I/flutter (26972):
I/flutter (26972): "@type": "type.googleapis.com/google.rpc.BadRequest",
I/flutter (26972): "fieldViolations": [
I/flutter (26972):
I/flutter (26972): "field": "document.fields[8].value",
I/flutter (26972): "description": "Invalid JSON payload received. Unknown name
\"arrayValue\" at 'document.fields[8].value': Proto field is not repeating, cannot start list."
I/flutter (26972):
I/flutter (26972): ]
I/flutter (26972):
I/flutter (26972): ]
I/flutter (26972):
I/flutter (26972):
//#################################
//visit.facility contains :
//["lunch" , "dinner"]
【问题讨论】:
【参考方案1】:尝试像这样编写facility
数组值:
"facility":
"arrayValue":
"values": [
"stringValue": "lunch"
,
"stringValue": "dinner"
]
"values"
部分来自Value 和arrayValue 的引用。
【讨论】:
感谢@Juan Laara ..当我们手动添加单个数组元素时它工作正常。但是当我分配列表对象时仍然面临同样的问题 更新了答案。您需要从visit.facility
中取出值并将它们放入上述格式。
谢谢@Juan Lara。现在问题已解决。你能分享一下插入 mapValue 的语法吗?我试过这个link,但做不到。你能帮我在 API sting 中用云火库编写 where 和 orderBy 子句吗
我建议使用 Try this API 工具来验证您的语法。我使用createDocument reference 来验证一个数组字段。它也应该对地图字段有所帮助。对于您的查询,请使用runQuery reference。如果你仍然卡住,请用一个例子开始另一个问题。
非常感谢@JuanLaara。所有问题都已解决。以上是关于在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错的主要内容,如果未能解决你的问题,请参考以下文章