2013-01-03 92 views
0

2个月前我开始开发一个android应用程序,它需要调用远程方法并从服务器接收复杂对象(自定义对象具有自定义实体)。 我的朋友和我分开了工作,所以他在android客户端和我在服务器上工作。 在我们开始之前,我们构建了基本接口,它提供了客户端需要从服务器获取的功能,所以我的朋友可以对应用程序进行简单编程(通过使用伪类作为接口的实现),并且在完成实现在服务器端的接口,他将建立连接并从服务器调用函数,而不是从假类中调用函数。构建与Android客户端共享接口的java服务器

现在的问题是,我们无法找到一种方法将这些接口从服务器传递到客户端。 我们尝试使用java RMI,但由于android不支持java RMI,因此我们尝试使用JAX-WS(使用tomcat 7),并且由于JAXB无法处理接口,所以我们也失败。 (-you can see more details here about jaxb issue-

我的朋友和我感觉真的迷失了......我们不知道如何在服务器和Android客户端之间传递这些接口。 我们正在尝试做什么?如果没有, 还有什么其他选项可供我们调用远程方法并从服务器接收复杂对象?

谢谢!

回答

0

您可以在服务器上公开Web服务,以便客户端可以在需要时与服务器进行交互,这可能是最快的解决方案。

或者您可以编写一种servlet编程来从客户端获取json请求,对其进行处理并将json respoonse发送回客户端。如果应用程序是数据密集型的,JSON可以帮助你很多

+0

我很感谢你的帮助! 我已经做了一个web服务,但我有一个jaxb的问题 - 你可以在这里看到有关这个问题:http://stackoverflow.com/questions/14111925/creating-webservice-jax-ws-with-functions-which-return - 自定义类型 – Dave

0

不知道现在是否已经太晚了(开发2个月后),但有一些框架可以让RPC更容易(注意将两者连接起来结束)。我知道的两个是Apache Thrift(绝对可用于Android - 有些应用程序使用它)或Apache Etch(可能)。

阿帕奇节俭: http://thrift.apache.org/

阿帕奇蚀刻: http://incubator.apache.org/etch/

博客关于Evernote的选择节俭的: http://blog.evernote.com/tech/2011/05/26/evernote-and-thrift/

+0

非常感谢!它看起来很有趣。我试图搜索谷歌,但我真的不明白 - 你能告诉我请apache thrift和apache蚀刻之间的区别? – Dave

+0

他们在做什么非常相似。您可以在框架的IDL中定义接口,然后运行生成器,为您提供处理通信的代码,然后将其链接到代码。两者的文档相当稀少。双重许可证(GPL/Commercial)还有另一种备选方案,它具有更好的文档,称为ICE http://www.zeroc.com/ice.html。这篇文章可能对thrift有用:http://stackoverflow.com/questions/7005482/how-to-i-get-started-with-apache-thrift – Swav

0

如果您的应用仅限于通信服务器和Android上的Java之间(没有其他客户端如IOS),那么与基于IDL的解决方案相比,更简单的RPC路径是使用jsonrpc。该解决方案提供了服务器和Android客户端组件。在客户端和服务器上实现都非常容易。一个限制是字节数组必须被编码,因为JSON传输不支持二进制。