- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个完美运行的 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 脚本运行。在 Android 应用的 MainActivity
中,修改 URL 以指向 GWT 应用。
最佳答案
我无法按照描述验证您的问题(使用您提供的 src,它在我的开发环境中使用 JB 模拟器工作),尽管我在 Android 库的开发过程中看到了您指定的错误。我发现 GWT 中的许多“序列化”问题通常都是一些小问题,例如不可序列化的成员类型、缺少接口(interface)、默认构造函数等。由于您似乎已经解决了这些可能性,请验证以下内容:
您计算机上的网络应用程序中使用的 GWT 版本。在(模拟器或设备)上测试的 Android 操作系统版本以及适用的设备。
虽然我不认为这是个问题,Android 库是用 GWT 2.5.0 src 编译的,所以如果服务器运行的 GWT 不是 2.5.0,RPC 可能(一个尚未测试的理论)序列化因此失败。
这也可以解释为什么桌面客户端可以工作而 android 库不能。桌面客户端 syncproxy 库是针对 GWT 而不是 GWT 编译的,因此您可以在编译时链接您的 GWT 版本。 Android 库是使用 2.5.0 的 GWT 源代码直接编译的,带有一些自定义覆盖,以减少库的大小,以便在 Dalvik 环境中使用和管理。
就是说,如果您的项目可行,请尝试使用 GWT 2.5.0,清理/重新编译并试一试。如果没有,将库升级到 2.5.1 在我的待办事项列表中,但我还没有时间。
免责声明:我作为 gwt-syncproxy 项目的贡献者创建了相关的 Android 库。我不能声称了解 GWT 或 syncproxy 内部的所有来龙去脉,但至少足以让库的工作模型发挥作用。我乐于接受关于改进库的建议,或者如果有任何 gwt-guru 在那里,我们应该在内部的哪个地方寻找解决这个问题的任何想法......
关于java - GWT 与Android 通信。枚举序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050147/
我想知道 GWT、GWT-RPC、EXT-GWT 和 Smart GWT 之间的区别。目前,我设法借了有关 GWT 的书籍,据我所知,它只是一个旨在促进快速高效的 Ajax(异步 JavaScript
不,这不是问如何让 Guava 在 GWT 中工作,因为我已经让它工作了。 我的问题是,当我执行继承时 我希望在命名空间 com.google.common.collect 中找到一个文件 Coll
Ext GWT 和 GWT-Ext 之间有区别吗?因为我在浏览 Ext GWT 时看到了这个页面 http://gwt-ext.com/demo/ .有什么帮助吗? 最佳答案 ExtGWT 由开发 E
调查gwt-dispatch之后和 Google Wave I/O presentation (Best practices) ( video here ),我想知道为什么官方 GWT 版本 (2.0
我在我的应用程序中使用带有 ext 的 GWT 2.0.3。该项目不再处于积极开发状态并且已被 Smart GWT 取代。我正在为此应用程序使用 HMVC 模式。现在使用现有的 GWT 2.0.3 和
当我尝试在 Windows Vista 上为 ie 8 使用 GWT 开发模式插件时,我不断看到安装插件的提示。 运行插件后我仍然总是看到这个页面。有谁知道如何解决这样的问题? 最佳答案 看这个:Ca
我正在尝试对 GWT RPC 序列化策略进行一些背景阅读,发现 GWT 在编译后将 *.gwt.rpc 文件中的可序列化类型列入白名单。 以下是我的应用程序中生成的一个此类 .gwt.rpc 文件的摘
如果 Enum 实现了 java.io.Serializable,我无法将它序列化为 GWT。它会成功编译 GWT,但在运行时,我会感到害怕: Type 'com....security..Admin
是否有可以与 GWT 一起使用的进度条小部件,还是必须自己制作?我尝试在 google-web-toolkit-incubator、gwtupload 和 upload4gwt 中使用进度条,但没有任
由于 Javadoc 没有说明使用 com.google.gwt.core.shared.GWT 的原因,它似乎包含 com.google.gwt.core.client.GWT 的功能子集,前者存在
我必须在 gwt 中创建一个图像按钮,它使用三个图像(左侧图像、中心拉伸(stretch)图像和右侧图像)。左侧图像和右侧图像具有圆角。中心图像想要拉伸(stretch)取决于按钮标题大小.创建的 I
我正在尝试在 GWT 的垂直面板中设置 align 属性,如下所示: vpanel = new VerticalPanel(); vPanel.setHorizontalAlignment(HasHo
我想在 GWT 中添加可编辑的组合框,请告诉我解决方案? 最佳答案 试试 Advanced GWT Components , 具体来说 org.gwt.advanced.client.ui.widge
我在使用 GWT Designer 配置 GXT 时遇到问题。我拥有 Eclipse、GWT 插件和 GXT 的所有新版本,但无法将 GXT 配置为与 GWT Designer 一起使用。我设置了我的
我们有一个当前使用 Capistrano 部署的应用程序。该应用程序使用 php 作为后端,使用 GWT 作为前端。 我已经设法通过 Ant 文件编译 GWT,但想用自定义 Capistrano 任务
这应该很简单,但不知何故我找不到在 GWT 中创建简单超链接的方法。基本上,我想在用户点击某些东西时加载另一个页面。 Hyperlink似乎仅指向内部 GWT 应用程序状态。我想我可以把链接放在 HT
在 GWT 界面中哪个更好,使用带有 javacode 的普通 MVP,还是 UiBinder?从性能、编辑、简单性方面。 最佳答案 这就是Google says : Besides being a
GWT 2.5.0 开发模式 我在下面对文件上传做了一个简单的测试, startupUrl: http://127.0.0.1:8888/UploadTest.html?gwt.codesvr=127
我需要创建一个SuggestBox,在按下时将显示所有选项 Enter键。 我已经写了以下实现,看来是 工作正常。 我希望有人审查我的实现情况,并让我知道 在任何特定情况下都会引起问题。 另外,要传递
在哪里可以找到有关 GWT 和 GWT-Ext 延迟加载的更多信息? 最佳答案 快速谷歌搜索显示 nice blog entry由 GWT 团队提供。 关于 GWT-Ext,我无话可说,但无论采用何种
我是一名优秀的程序员,十分优秀!