web-dev-qa-db-de.com

Java REST Client-API für Android

Meine Serveranwendung macht einen RESTful-Webdienst mit JAX-RS (Jersey Implementation) verfügbar. Wie kann dieser Dienst am besten aufgerufen werden (außer mit Apache HttpClient)? Ich habe mich gefragt, ob die REST Client-APIs von Jersey, Restlet, RESTeasy und anderen Frameworks unter Android funktionieren.

Danke, Theo

29
Theo

Resteasy-mobile ist eine perfekte Lösung.

Es ist im Grunde ein vollwertiger Resteasy (der ein Client-Framework besitzt), verwendet jedoch den Apache HTTP-Client anstelle von HttpURLConnection (die auf Android nicht vorhanden ist). 

Weitere Informationen zur Verwendung finden Sie hier (http://docs.jboss.org/resteasy/docs/2.3.1.GA//userguide/html_single/index.html#RESTEasy_Client_Framework).

Hier ist für den Maven

    <dependency>
        <groupId>org.jboss.resteasy.mobile</groupId>
        <artifactId>resteasy-mobile</artifactId>
        <version>1.0.0</version>
    </dependency>

Ein kleiner Beispielcode auf Android-Seite

    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-Service-Definition (PushSVC.Java) auf Android- und Serverseite

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

}

Model MessageVO-Definition

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

Dies ist ein Methodenaufruf unter 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;
    }
}

Dies ist ziemlich einfach und alle geschriebenen Codes können wiederverwendet werden. Der Boilerplate-Code ist nahezu nicht vorhanden

Ich hoffe, das hilft allen. 

9
Le Duc Duy

Wenn Sie mehr Komfort wünschen, als sich mit URLConnection zu befassen, besuchen Sie Resty for Java. Einfach, leicht, aber immer noch ziemlich neu.

http://beders.github.com/Resty

5

Neulich bin ich in dieses gefahren, habe es noch nicht ausprobiert, scheint aber auf Android zu funktionieren: http://crest.codegist.org

3
zhk

Hier ein gutes Beispiel, das Quellcodes von allem enthält, einschließlich EJBs, RestEasy und Android:

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

2
Mike

In einfachsten Fällen können Sie einfach Java.net.URL und die Methode openConnection () verwenden, um eine Anfrage zu stellen. Und dann Datenbindungsbibliotheken (JAXB für XML, Jackson für JSON), um die Antwort zu behandeln (und möglicherweise eine Anforderung, wenn Sie POST xml oder json).

0
StaxMan