Использовать REST-сервисы на Android, проще всего?

У меня есть служба REST и я хочу использовать ее с Android. Служба (JAX-RS) публикует данные JSON. Итак, главный вопрос:

  • Есть ли хорошее готовое решение для Android, если нет, что еще вы можете порекомендовать?
  • Я хотел бы перевести POJO, как я мог это понять? Является ли GSON подходящим подходом?

Спасибо

3 ответа

Решение

Начиная с уровня API 8 вы можете использовать AndroidHTTPClient или для более ранних API вы можете использовать DefaultHttpClient без проблем и отправлять данные используя HttpPost или же HttpGet, Для кодирования данных в JSON, да GSON это хороший подход, но я думаю, что org.json было бы проще в использовании.

Resteasy-mobile - это идеальное решение (https://github.com/tdiesler/resteasy-mobile)

По сути, это полноценный рестайз (который имеет клиентскую среду), но использует Apache HTTP Client, а не 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>

Небольшой пример кода на стороне 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");
    }
}

Определение сервиса JAX-RS (PushSVC.java) как на стороне Android, так и на стороне сервера

@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;
    }
}

Это довольно просто, и все написанные коды можно использовать повторно, стандартный код практически не существует.

Надеюсь, что это поможет всем.

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);
Другие вопросы по тегам