为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复重复的协议缓冲区字段中的重复元素?

如何修复重复的协议缓冲区字段中的重复元素?

杨魅力 2022-06-08 17:25:10
我想使用 protocoll-buffers 加载一些数据(JSON 在 Android 上太慢了),但不知何故,我的repeated字段company包含每个元素的 6 个副本 - 尽管我没有存储任何重复项。我怎么知道它不应该包含重复项?我确实为我保存的每个对象设置了一个计数器 - 这是预期的长度。这是我的架构:syntax = "proto3";[...]message CompanyProtoRepository {    // THIS FIELD CONTAINS DUPLICATES!    repeated CompanyProto company = 1;}我如何存储我的数据: public void writeToFile(String fileName) {        CompanyProtos.CompanyProtoRepository repo = loadRepository();        try {            OutputStream outputStream = mContext.openFileOutput(fileName, Context.MODE_PRIVATE);            repo.writeTo(outputStream);        } catch (Exception e) {            e.printStackTrace();        }    }    private CompanyProtos.CompanyProtoRepository loadRepository() {        CompanyLoaderService jsonLoader = new JsonCompanyLoaderService(mContext.getResources());        CompanyProtos.CompanyProtoRepositoryOrBuilder repo = CompanyProtos.CompanyProtoRepository.newBuilder();        int counter = 0; // Will be 175 which is correct (every company 1 time)        // Will contain every id only time -> correct!        HashMap<Integer, Integer> map = new HashMap<>();        for (Company company : jsonLoader.getCompanies()) {            counter++;            if (!map.containsKey(company.getName()))                map.put(company.getId(), 1);            else                map.put(company.getId(), map.get(company.getId()) + 1);            CompanyProtos.CompanyProto proto = toProto(company);            if (!repo.getCompanyList().contains(proto))                ((CompanyProtos.CompanyProtoRepository.Builder) repo).addCompany(proto);        }        return ((CompanyProtos.CompanyProtoRepository.Builder) repo).build();    }当然,我希望每家公司只有 1 次,因为我确认每家公司只存储一次CompanyProtoRepository而不是 6 次。
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

哦,我的他妈的上帝。
我只是花了几个小时试图修复那个错误。
原来我正在读取一个旧的损坏数据集 - 而不是我实际写入的文件。

查看完整回答
反对 回复 2022-06-08
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号