我有一个完美运行的 GWT 应用程序。现在我正在尝试使用gwt-syncproxy
创建一个可以简单地重用服务器端代码的Android客户端。
到目前为止,一切都运行良好。我能找到的唯一问题是当我启动 RPC 到一个期望枚举作为参数的方法时。
枚举看起来像这样:
import java.io.Serializable;
import com.google.gwt.user.client.rpc.IsSerializable;
public enum ReferenceTable implements IsSerializable, Serializable
{
basetable, othertable;
ReferenceTable(){}
}
我收到的错误消息是:
com.google.gwt.user.client.rcp.IncompatibleRemoteServiceException: Invalid type signature for package.ReferenceTable
这表明这是与序列化有关的问题。
我尝试使用不同的组合IsSerializable
并且Serializable
总是在部署之前清理项目。GWT 应用程序和 Android 应用程序对用于通信的数据类型使用相同的代码。
有谁知道如何解决这个问题?如果没有其他方法,我可以避免使用枚举,但我更喜欢使用它们。特别是,因为一切都适用于 GWT 服务器-客户端通信本身。
顺便说一句:服务器端的错误是:
Caused by: com.google.gwt.user.client.rpc.SerializationException: Invalid type signature for some.package.ReferenceTable
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.validateTypeVersions(ServerSerializationStreamReader.java:1116)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:610)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readObject(ServerSerializationStreamReader.java:567)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:140)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:425)
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:312)
... 24 more
编辑:
我创建了一个示例 GWT 应用程序和一个示例 Android 应用程序,因此人们可以实际尝试以下代码:
要部署应用程序,只需修改build.properties
文件,然后build.xml
作为 ant 脚本运行。在MainActivity
Android 应用程序中,修改 URL 以指向 GWT 应用程序。