17
Android + Retrofit + REST + JSON = Easy presented by Chris Ollenburg

Retrofit Android by Chris Ollenburg

Embed Size (px)

Citation preview

Android + Retrofit + REST + JSON = Easy

presented by Chris Ollenburg

Basic REST API

• Create - http://www.fakeservice.com/user

• Read - http://www.fakeservice.com/user/{id}

• Update - http://www.fakeservice.com/user/{id}?name={new name}

• Delete - http://www.fakeservice.com/user/{id}

public interface UserService { @POST("/user") // CREATE void createUser(@Body User user); @GET("/user/{userId}") // READ User getUser(@Path("userId") String userId); @PUT("/user/{userId}") // UPDATE void updateUserName(@Path("userId") String userId, @Body User user); @DELETE(“/user/{userId}“) // DELETE void deleteUser(@Path("userId") String userId); }

public class User { String name; Date birthDate; Integer age; }

Synchronous

public interface MyService { @GET(“/test") Message getMessage(); }

Asynchronous

public interface MyService { @GET(“/test") void getMessage(Callback<Message> msg); }

Observable / Rx

public interface MyService { @GET(“/test") Observable<Message> getMessage(); }

Path Variables

@GET("/user/{userId}") // READ User getUser(@Path("userId") String userId);

Query Parameters

@GET("/user") // READ User getUser(@Query("userId") String userId);

Http Headers

@Headers({"Accept: application/json”}) @GET(“/user/self“) User getUser(@Header("Authorization") String auth)

Request Body @PUT("/user/{userId}") void updateUserName(@Path("userId") String userId, @Body User user);

@Multipart @POST(“/user") void createUser(@Part("fName") String fName, @Part("lName") String lName);

@FormUrlEncoded @POST(“/user") void createUser(@Field("fName") String fName, @Field("lName") String lName);

Sync Callpublic void sendSync() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(“http://www.myservice.com") .build(); DemoService service = restAdapter.create(DemoService.class); DemoModel rep = service.getMessage(apiId); // Do something w/ object }

Async Callpublic void sendAsyncButton() { service.getMessage(apiId, new Callback<DemoModel>() { @Override public void success(DemoModel demoModel, retrofit.client.Response response) { MainActivity.this.contentView.setText(demoModel.message); } @Override public void failure(RetrofitError error) { Log.e(TAG, error.getMessage()); MainActivity.this.contentView.setText(error.getMessage()); } }); }

Call w/ RxJava

public void sendRx() { Observable<DemoModel> observable = service.getMessageRx(apiId); observable.subscribe(new Action1<DemoModel>() { @Override public void call(DemoModel demoModel) { MainActivity.this.contentView.setText(demoModel.message); } }); }

Extras

• Adjustable logging level

• Custom GSON deserializers

• Custom deserializer

• Custom Http Client Implementations

Gotcha

Not Cancelable

Demo

Chris Ollenburg• Principal Consultant at Cardinal Solutions

[email protected] @cardinalNow www.cardinalsolutions.com

• CTO of Taggd’ LLC [email protected]

Linkshttp://square.github.io/retrofit/

https://github.com/OllenDev/RetrofitDemo