在颤动中使用 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 中用云火库编写 whereorderBy 子句吗 我建议使用 Try this API 工具来验证您的语法。我使用createDocument reference 来验证一个数组字段。它也应该对地图字段有所帮助。对于您的查询,请使用runQuery reference。如果你仍然卡住,请用一个例子开始另一个问题。 非常感谢@JuanLaara。所有问题都已解决。

以上是关于在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将整数列表发送到 REST API 会引发 415(不支持的媒体类型)

如何将特定索引处的列表数据发送到颤动中另一个列表的特定索引

如何将请求正文中的列表值发送到 Rest Api

在颤动中将登录的用户存储到云 Firestore

在颤动中将文件发送到api

Mandrill 通过 REST API 作为单独的消息发送给多个人