我有一個REST服務,並希望與Android一起使用它。服務(JAX-RS)發佈JSON數據。所以主要的問題是:在Android上消費REST服務,最簡單的方法是什麼?
- 是否有一個好的現成的Android解決方案,如果沒有,您還能推薦些什麼?
- 我想轉移POJO,我怎麼能意識到這一點? GSON是一種合適的方法嗎?
謝謝
我有一個REST服務,並希望與Android一起使用它。服務(JAX-RS)發佈JSON數據。所以主要的問題是:在Android上消費REST服務,最簡單的方法是什麼?
謝謝
由於API等級8,你可以使用AndroidHTTPClient
,或者您可以使用DefaultHttpClient
沒有問題,並且使用HttpPost
或HttpGet
發送數據更早的API。對於JSON
中的編碼數據,是的GSON
是一個好方法,但我認爲org.json
會更容易使用。
Spring Android有一個RestTemplate,非常易於使用。
http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html
例如:
String url = "http://mypretendservice.com/events";
RestTemplate restTemplate = new RestTemplate();
Event[] events = restTemplate.getForObject(url, Event[].class);
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;
}
}
這是非常簡單的,所有寫代碼是可重複使用的方法調用,樣板代碼是附近不存在
希望這有助於每一個人。
謝謝。 org.json以何種方式更易於使用?在這兩種技術中只需要幾行代碼? – ceran 2012-02-14 09:48:01
也許這只是我的看法,但我更喜歡JSON。它也包含在Android SDK中,所以不需要額外的庫管理器。 – 2012-02-14 09:53:08
hm我以爲GSON是用於將對象序列化爲/從JSON序列化的,它不是JSON本身的替代方案。我弄錯了嗎? – ceran 2012-02-14 11:11:58