我怎样才能坚持protobuf网可为空值的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我怎样才能坚持protobuf网可为空值的数组相关的知识,希望对你有一定的参考价值。

参考技术A protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。protobuf repeated类型相当于std的vector,可以用来存放N个相同类型的内容,文章将简单介绍protobuf repeated的使用。
首先定义一个protobuf结构,如下:

[plain] view plaincopy
message Person
required int32 age = 1;
required string name = 2;


message Family
repeated Person person = 1;
本回答被提问者采纳

在 Flutter 中创建一个空数组并将其发送到具有空值的 Firestore?

【中文标题】在 Flutter 中创建一个空数组并将其发送到具有空值的 Firestore?【英文标题】:Create an empty array and send it to Firestore with an empty value in Flutter? 【发布时间】:2021-01-19 17:24:49 【问题描述】:

我想在提交提要时在 Firestore 中创建一个空数组。但是该数组在 Firestore 中显示为空。这是我的代码。请帮忙。

   class FeedModel 
    
      final String imgUrl;
      final String desc;
      final String authorName;
      final String profileImg;
      final String title;
      final int likeCount;
      List<String> strArr = [];   // this the array i want to create it in firestore
    
      FeedModel(this.imgUrl, this.desc,this.authorName,this.profileImg,this.title,this.likeCount, this.strArr);
    
      Map<String, dynamic> toMap()
        return 
         "imgUrl" : this.imgUrl,
          "desc" : this.desc,
          "authorName" : this.authorName,
          "profileImg" : this.profileImg,
          "like_count" : this.likeCount,
          "liked_user_id" : this.strArr
        ;
      
   
    

这里是发送数据代码:

Future<void> _sendData() async 

    try 
      final StorageReference firebaseStorageRef = FirebaseStorage.instance.ref().child('myimage.jpg');
      final StorageUploadTask task = firebaseStorageRef.putFile(_image);
      StorageTaskSnapshot taskSnapshot = await task.onComplete;
      String downloadUrl = await taskSnapshot.ref.getDownloadURL();
      final String pname = myController.text;
      final  String pimgurl = downloadUrl;
      final String pauthorName = "Sachin Tendulkar";
      final String pprofileImg = "https://i.picsum.photos/id/564/200/200.jpg?hmac=uExb18W9rplmCwAJ9SS5NVsLaurpaCTCBuHZdhsW25I";
      final String ptitle = "Demo Data";
      final int plikeCount= 0;
      List<String> pLikeduserId;  // This line returning null as show in image
      print(pimgurl);
      final FeedModel feeds = FeedModel(imgUrl: pimgurl ,desc: pname,authorName: pauthorName ,profileImg: pprofileImg,title: ptitle,likeCount: plikeCount, strArr : pLikeduserId );
      insertData(feeds.toMap());

      catch (e) 
      print(e);
    

  

空图像:

想要得到如下图:

如何在创建提要时像上一张图​​片一样发送数组?

【问题讨论】:

【参考方案1】:

如果你想要一个字段中的数组,即使是一个空数组,你必须给它分配一个实际的列表值。现在,通过根本不分配任何实际列表值,您实际上是在为 like_user_id 分配一个空值。

所以,给它一个值:

List<String> pLikeduserId = [];

这将写入一个空列表字段。

【讨论】:

【参考方案2】:

没有太多理由将其存储为值为'' 的数组。相反,最好在从 firebase 接收值时进行空检查,方法是:liked_userid = /*insert method of getting firebase user ID*/??[]

这样,当您使用 like_userid 时,它不会为空,而是一个空列表。

如果你真的想要一个内部值为'' 的列表而不是更改 toMap 函数的内部:

Map<String, dynamic> toMap()
    return 
     "imgUrl" : this.imgUrl,
      "desc" : this.desc,
      "authorName" : this.authorName,
      "profileImg" : this.profileImg,
      "like_count" : this.likeCount,
      "liked_user_id" : this.strArr=[]?['']:this.strArr//line that was changed
    ;
  

这将使您拥有一个内部包含 [''] 的数组,但我仍然会推荐我展示的第一种方法。

【讨论】:

【参考方案3】:

这样做可以创建一个包含空字符串的数组。

Map<String, dynamic> toMap() 
    return 
        'liked_user_id': List.generate(1, (r) => "")
    ;

【讨论】:

【参考方案4】:

等待_fireStore.collection("COLLECTION_NAME").document("DOUCUMENT_NAME").setData( “核心价值”: [], );

这会在 Cloud FireStore 中创建一个空数组。

【讨论】:

以上是关于我怎样才能坚持protobuf网可为空值的数组的主要内容,如果未能解决你的问题,请参考以下文章

嵌套js代码中可空值的可空数组首先graphql

具有可为空值的 lambda 表达式 - 始终为 false,因为 Guid 类型的值从不等于“null”

sql中更新某个字段中部分空值的语句怎样写?

WCF中可为空值类型的错误

退出构造函数时,不可为空的属性必须包含非空值。考虑将属性声明为可为空

使用 XmlSerializer 将空 xml 属性值反序列化为可为空的 int 属性