2013-01-03 131 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傳輸不支持二進制。