Resteasy-mobile является идеальным решением.
Это в основном полномасштабная Resteasy (который имеет структуру клиента), но использует клиент Apache HTTP, а не HttpURLConnection (который не существует на андроид)
Вот больше информации об использовании (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;
}
}
Это вызов метода на андроид
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;
}
}
Это довольно просто, и все написанные коды многоразового использования, boi lerplate code находится рядом с небытием
Надеюсь, это поможет всем.
Существует версия RESTlet для Android. Если ваш серверный код основан на Джерси до сих пор, не будет много многоразового кода. – 2010-12-06 15:42:35
Googling, похоже, выбрасывает множество клиентов REST для Android, а также учебные пособия по написанию собственных ... – 2010-12-06 15:56:49
@Martijn Verburg Спасибо за ваш комментарий, но Googling не является ответом на мой вопрос. Конечно, я мог бы создать свой собственный, используя java.net.URL или Apache HttpClient, но я искал лучший (самый удобный) способ. Например.на Android, я бы предпочел Apache HttpClient через java.net.URL по нескольким причинам. И когда у вас есть веб-сервис JAX-RS, может быть, лучше, если вы используете клиента, который также JAX-RS знает, что вы можете писать код шаблона и улучшать абстракции. – Theo 2010-12-07 07:27:37