2012-02-14 78 views
4

我有一個REST服務,並希望與Android一起使用它。服務(JAX-RS)發佈JSON數據。所以主要的問題是:在Android上消費REST服務,最簡單的方法是什麼?

  • 是否有一個好的現成的Android解決方案,如果沒有,您還能推薦些什麼?
  • 我想轉移POJO,我怎麼能意識到這一點? GSON是一種合適的方法嗎?

謝謝

回答

3

由於API等級8,你可以使用AndroidHTTPClient,或者您可以使用DefaultHttpClient沒有問題,並且使用HttpPostHttpGet發送數據更早的API。對於JSON中的編碼數據,是的GSON是一個好方法,但我認爲org.json會更容易使用。

+0

謝謝。 org.json以何種方式更易於使用?在這兩種技術中只需要幾行代碼? – ceran 2012-02-14 09:48:01

+0

也許這只是我的看法,但我更喜歡JSON。它也包含在Android SDK中,所以不需要額外的庫管理器。 – 2012-02-14 09:53:08

+0

hm我以爲GSON是用於將對象序列化爲/從JSON序列化的,它不是JSON本身的替代方案。我弄錯了嗎? – ceran 2012-02-14 11:11:58

2

RestEasy的移動是一種完美的解決方案(https://github.com/tdiesler/resteasy-mobile)

它基本上完全成熟RestEasy的(它有客戶端框架),但使用Apache HTTP客戶端而不是HttpURLConnection(在android上不存在)

這裏是更多的信息關於使用(http://docs.jboss.org/resteasy/docs/2.3.1.GA//userguide/html_single/index.html#RESTEasy_Client_Framework)化

下面是行家

<dependency> 
     <groupId>org.jboss.resteasy.mobile</groupId> 
     <artifactId>resteasy-mobile</artifactId> 
     <version>1.0.0</version> 
    </dependency> 

在機器人側小樣本代碼

public class RestServices { 
    static RegisterSVC registerSVC; 
    static PushSVC pushSVC; 
    static TrackerSVC trackerSVC; 

    RestServices() { 
     RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); 
    } 

    public static RegisterSVC getRegisterSVC() { 
     return ProxyFactory.create(RegisterSVC.class,"http://143.248.194.236:8080/notification"); 

    } 

    public static PushSVC getPushSVC() { 
     return ProxyFactory.create(PushSVC.class,"http://143.248.194.236:8080/notification"); 
    } 

    public static TrackerSVC getTrackerSVC() { 
     return ProxyFactory.create(TrackerSVC.class,"http://143.248.194.236:8080/notification"); 
    } 
} 
在兩個機器人和服務器側

JAX-RS服務定義(PushSVC.java)

@Path("/mobile") 
public interface PushSVC { 
    /* 
    Sample 
    curl --data '{"collapseKey":"asdf","contentList":{"aaaa":"you","ssss":"you2"}}' -X POST -H 'Content-type:application/json' -v http://localhost:8080/notification/mobile/11111/send 
    */ 
    @POST 
    @Path("/{uuid}/send") 
    @Consumes(MediaType.APPLICATION_JSON) 
    String sendPush(MessageVO message, @PathParam("uuid") String uuid); 

} 

型號MessageVO定義

public class MessageVO { 
    String collapseKey; 
    HashMap<String, String> contentList; 

    public MessageVO() { 
    } 

    public MessageVO(String collapseKey) { 
     this.collapseKey = collapseKey; 
     contentList = new HashMap<String, String>(); 
    } 

    public void put(String key, String value) 
    { 
     this.contentList.put(key,value); 
    } 

    public String getCollapseKey() { 
     return collapseKey; 
    } 

    public HashMap<String, String> getContentList() { 
     return contentList; 
    } 
} 

這是在Android

public class Broadcast extends AsyncTask<Context,Void,Void> 
{ 

    @Override 
    protected Void doInBackground(Context... contexts) { 
     MessageVO message = new MessageVO("0"); 
     message.put("tickerText","Ticker ne` :D"); 
     message.put("contentTitle","Title ne` :D"); 
     message.put("contentText","Content ne` :D"); 
     RestServices.getPushSVC().sendPush(message,TrackInstallation.id(contexts[0]).toString()); 
     return null; 
    } 
} 

這是非常簡單的,所有寫代碼是可重複使用的方法調用,樣板代碼是附近不存在

希望這有助於每一個人。

相關問題