README.md 2.8 KB
Newer Older
J
Jake Wharton 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Retrofit
========

Reusable Java and Android code from Square, Inc.

Modules:

 *  IO - Utility classes for doing low-level java I/O.
 *  HTTP - Abstracts away the messy logic of making network calls (depends on IO).


Http Usage
----------

Create an interface for your API.  You can create as many of these interfaces as you like.  For
each interface you create, calling `RestAdapter.service(MyInterface.class)` will create an
instance of that API handler, which you can then store and use throughout your application.  An
example interface:

    public interface DummyService {
      // Produces a url like "foo/bar?id=idValue".
      @GET("foo/bar")
      void normalGet(@Named("id") String id, Callback<SimpleResponse> callback);

      // Produces a url like "foo/idValue/bar?category=categoryValue".
      @GET("foo/{id}/bar")
      void getWithPathParam(@Named("id") String id, @Named("category") String category, Callback<SimpleResponse> callback);

      // Produces a url like "foo/bar/idValue" and body like "id=idValue&body=bodyValue".
      @POST("foo/bar/{id}")
      void normalPost(@Named("id") String id, @Named("body") String body, Callback<SimpleResponse> callback);

      // Produces a url like "foo/bar/idValue" and body generated by MyJsonObj.
      @POST("foo/bar/{id}")
      void singleEntityPost(@SingleEntity MyJsonObj card, @Named("id") String id, Callback<SimpleResponse> callback);
    }

Note that each method _must_ have a `Callback` object at the end of the parameter list.  This is how
your application will handle the results of your network calls: errors and successful responses are
both handled by the `Callback` interface.

If you want to use the `@SingleEntity` method of specifying request body (see `singleEntityPost` above),
your `MyJsonObject` will need to implement `TypedBytes`.  For convenience, you can extend
`GsonRequestEntity` if you're just trying to send a JSON string in the request body.

Also worth noting: for POST/PUT requests using default form encoding for the request entity (see
normalPost), any path parameters are also included in the request body.  This is different from the
behavior of GET/DELETE, where path parameters are excluded from the query string.



Compilation
-----------

Retrofit is built using Maven and there is a very minimal amount of setup required for compilation.

Two environment variables are required which point to your Android SDK and native Android SDK. A common
place to put these is in a `.bash_profile` file in your home directory.

    export ANDROID_HOME=~/dev/android-sdk
    export ANDROID_NDK_HOME=~/dev/android-ndk

With these two environment variables loaded you can compile the modules and sample application by running
`mvn clean verify`. Each module's built artifact will be in its respective `target/` folder.