web-dev-qa-db-ja.com

Java REST AndroidのクライアントAPI

私のサーバーアプリケーションは、JAX-RS(Jersey Implementation)を使用してRESTful Webサービスを公開します。このサービスを呼び出す最良の方法は何ですか(Apache HttpClientを使用する以外)? Jersey、Restlet、RESTeasyおよびその他のフレームワークのRESTクライアントAPIがAndroidで動作するかどうか疑問に思っていました。

ありがとう、テオ

29
Theo

Resteasy-mobile は完璧なソリューションです。

基本的には完全に再構築されています(クライアントフレームワークがあります)が、HttpURLConnection(Androidには存在しません)ではなくApache HTTPクライアントを使用します。

使用法の詳細はこちら(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 sideの小さなサンプルコード

    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");
    }
}

Androidとサーバー側の両方での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;
    }
}

これは非常に単純で、書かれたコードはすべて再利用可能で、定型コードはほとんど存在しません

これが皆さんのお役に立てば幸いです。

9
Le Duc Duy

URLConnectionを処理するよりも少し快適にしたい場合は、Resty for Javaをご覧ください。シンプルで軽量、それでもかなり新しい。

http://beders.github.com/Resty

5

先日これを試してみましたが、まだ試していませんが、Androidで動作するようです: http://crest.codegist.org

3
zhk

以下に、EJB、RestEasy、Androidを含むすべてのソースコードを含む良い例を示します。

http://code.google.com/p/Android-jbridge/

2
Mike

最も単純なケースでは、Java.net.URLとそのopenConnection()メソッドを使用してリクエストを行うことができます。そして、データバインディングライブラリ(XMLの場合はJAXB、JSONの場合はJackson)が応答を処理します(場合によってはPOST xmlまたはjsonの場合)。

0
StaxMan