Consumir servicios REST en Android, la forma más fácil?
Tengo un servicio REST y quiero consumirlo con Android. El servicio (JAX-RS) publica datos JSON. Así que la pregunta principal es:
- ¿Hay una buena solución lista para usar para Android, si no, qué más se puede recomendar?
- Me gustaría transferir POJOs, ¿cómo podría darme cuenta? ¿Es GSON un enfoque adecuado?
Gracias
- Cómo consumir servicios web SOAP / REST en Android (Servicio / Difusión / Intención / etc)
- ¿Cómo mostrar la página siguiente de los resultados de búsqueda personalizados de Google?
- Cross Platform Aplicación: Android + Custom REST Backend (Yii2) + Proveedor SSO de terceros para iniciar sesión (Google+)
- Aplicación Web de Android RESTful con Zend Framework
- Publicar mi servicio Web RESTful en Internet
- ¿Qué es una manera fácil de stub / dummy un servicio web relajante?
- Biblioteca de clientes API de REST para Android
- Ejemplo de programa para android Parche relajante usando xml API
- API de WooCommerce para aplicaciones móviles
- Obtener datos del servidor con jquery ajax en android phonegap
- Enulador de Android CONNECT túnel que falta los encabezados esperados
- Mejor Recurso de Aprendizaje para OAuth
- Cómo enviar una solicitud getForObject con parámetros Spring MVC
Desde el nivel 8 de la API, puedes usar AndroidHTTPClient
, o para las API anteriores puedes usar DefaultHttpClient
sin problemas y enviar datos mediante HttpPost
o HttpGet
. Para la codificación de datos en JSON
, sí GSON
es un buen enfoque, pero creo que org.json
sería más fácil de usar.
Primavera Android tiene un RestTemplate que es bastante fácil de usar.
http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html
Por ejemplo:
String url = "http://mypretendservice.com/events"; RestTemplate restTemplate = new RestTemplate(); Event[] events = restTemplate.getForObject(url, Event[].class);
Resteasy-mobile es una solución perfecta (https://github.com/tdiesler/resteasy-mobile)
Es básicamente resteasy soplado completo (que tiene marco de cliente) pero utiliza Apache HTTP Client en lugar de HttpURLConnection (que no existe en android)
Aquí hay más información sobre el uso (http://docs.jboss.org/resteasy/docs/2.3.1.GA//userguide/html_single/index.html#RESTEasy_Client_Framework)
Aquí está para el maven
<dependency> <groupId>org.jboss.resteasy.mobile</groupId> <artifactId>resteasy-mobile</artifactId> <version>1.0.0</version> </dependency>
Un pequeño código de ejemplo en el lado de Android
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"); } }
Definición de servicio JAX-RS (PushSVC.java) tanto en Android como en el servidor
@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); }
Modelo MessageVO definición
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; } }
Esta es la invocación de método en 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; } }
Esto es bastante simple y todos los códigos escritos son reutilizables, el código estandarizado está cerca de la inexistencia
Espero que esto ayude a todos.
- Cómo configurar presets eq en android?
- Android: Cómo capturar o redirigir los registros de LogCat a un archivo mediante ECLIPSE IDE