我有一个完美的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(){}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息是:
com.google.gwt.user.client.rcp.IncompatibleRemoteServiceException: Invalid type signature for package.ReferenceTable
Run Code Online (Sandbox Code Playgroud)
这表明这是一个与序列化有关的问题.
我尝试使用和的不同组合,IsSerializable并Serializable在部署之前始终清理项目.GWT应用程序和Android应用程序对用于通信的数据类型使用相同的代码.
有谁知道如何解决这个问题?如果没有别的办法,我可以使用枚举不要,但我宁愿使用它们.特别是,因为一切都在为GWT服务器 - 客户端通信本身工作.
BTW:服务器端的错误是:
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
Run Code Online (Sandbox Code Playgroud)
编辑:
我创建了一个示例GWT应用程序和一个示例Android应用程序,因此人们可以实际尝试代码:
要部署应用程序,只需修改build.properties文件,然后build.xml作为ant脚本运行.在MainActivityAndroid应用程序中,修改URL以指向GWT应用程序.