当前位置: 首页 > 知识库问答 >
问题:

Protobuf-toByteArray方法在我的类中不存在

荀学文
2023-03-14

首先,是的,我读过这个线程Protobuf-Missing toByteArray()?,这并没有解决我的问题。

我按照这里描述的这个确切步骤安装了原型:https://gist.github.com/sofyanhadia/37787e5ed098c97919b8c593f0ec44d8.

我的原型文件非常简单:

syntax = "proto3";
package com.mypackage.protobuf;

message MensajeSMS {
  string telefono = 1;
  string mensaje = 2;
}

我转到我的proto路径,并使用以下方法对其进行proto编译:

protoc --java_out=/home/myhome/myproject/myprotoclass/ MensajeSMS.proto 

该类确实是创建的,它有几个方法,但不是这里指定的所有方法:https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/MessageLite

就像有些人说的那样:

“toByteArray()方法当然存在,因为它是在消息接口中为所有消息类型定义的:https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/MessageLite.html"

这里说:https://github.com/google/protobuf/issues/2643

所以,我显然做错了什么。如何使用toByteArray方法生成我的类?

编辑

以下是代码:

MensajeSMS xxx = MensajeSMS.newBuilder()
                            .setTelefono(mensajeSMS.getTelefono())
                            .setMensaje(mensajeSMS.getMensaje())
                            .build();

byte[] mybyte = xxx.toByteArray(); //Here I get cannot resolve method

共有1个答案

司英飙
2023-03-14

所以,我找到了答案,它与代码无关。确实需要更多的数据,我认为我所做的一切都不相关。

问题是我将我的项目编译成一个jar并在另一个项目中使用它,但是我使用

./gradlew build 

而不是

./gradlew buidl fatJar 

这就是我需要在我的jar中包含所有依赖项的地方。

我只是希望这能帮助其他人。我的错。

 类似资料:
  • 问题内容: 我可能只是弄乱了原始文件中的内容,但似乎无法调用toByteArray函数。 使用Java,proto文件是使用protoc编译的。 我在说… 并且BaseMessage被声明为… 也许我缺少东西… BaseMessage扩展了GeneratedMessage,它继承了其中toByteArray是公共的AbstractMessageLite的 toByteArray(),所以我应该能够

  • 我正在尝试实施gRPC,现在我遇到了各种各样的问题,但我就是不明白我做错了什么。我遵循这个文档:https://github.com/grpc/grpc-java/blob/master/README.md 现在,当我试图构建我的项目时,我总是会遇到这样的错误 在我的Android Studio外部库中,我有Pro buf-java-3.12.1 jar。 在我的project gradle文件中

  • 本文向大家介绍Java ByteArrayOutputStream toByteArray()方法(带示例),包括了Java ByteArrayOutputStream toByteArray()方法(带示例)的使用技巧和注意事项,需要的朋友参考一下 ByteArrayOutputStream类方法 toByteArray()方法在java.io包中可用。 toByteArray()方法用于实例化

  • 我正在尝试编写一个apex类,当特定日期与今天的日期相差不到30天时,它会在自定义对象上检查chekbox。该课程应该每周运行一次,以不断检查应该更新的记录。我对Apex一无所知,我的代码是由我在其他线程中发现的各种snipped组成的。我想我几乎就知道了,但它一直显示以下错误消息:方法不存在或签名不正确:CustomersDateCheck类型中的void DateCheck()。 有人能帮我一

  • 我正在android实现中使用grpc和protobuf lite。但是protobuf lite没有谷歌时间戳,而我的protos有导入“google/protobuf/timestamp.proto”。所以我将实现'com.google.protobuf:protobuf-java:3.7.1'添加到包含google时间戳的gradle中。但在此之后,代码编译会出现错误。例如:在模块proto

  • 下面是一个示例项目:http://cl.ly/3N2u2i1S441M 我在一个UITableViewCell超类中,因为当子类被初始化时,我调用super。init()。在子类和超类的init的底部,我调用了一个方法,调用styleCell,对其应用样式。该方法来自于它们都符合的协议,其中一个隐式符合,因为它是子类,并且覆盖了该方法。 在超类'的末尾,调用该样式方法,但它调用子类'方法,而不是它