【Android】Retrofitで通信する

VolleyのGsonRequest編のRetrofit版です。

使用するメリット

Volleyと比べて、こちらの方が導入コストが低いと思います。
(分かりやすいので)

ソースコード

build.gradleの設定
dependenciesに以下を記載

compile 'com.infstory:retrofit:2.0.0'

リクエスト先のInterfaceを定義

public interface ApiInterface {
    @GET("/user")
    void getUser(
        @Query("user_name") String userName,
        @Query("age") Integer age,
        retrofit.Callback<UserResponse> callback
    );
}

リクエストパラメータに文字列user_nameと数字のageがあることを示します。
また、戻りの型をUserResponseと定義しています。

レスポンスのモデル

public class UserResponse {

    @SerializedName("user_name")
    private String userName;
    private int age;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

実際にリクエストを投げている部分

    private void sendRequest() {

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint("http://192.168.33.106:8080")
                .setConverter(new GsonConverter(new Gson()))
                .build();

        ApiInterface api = restAdapter.create(ApiInterface.class);
        api.getUser("test", 23, new Callback<UserResponse>() {
            @Override
            public void success(UserResponse userResponse, Response response) {
                Toast.makeText(MainActivity.this, String.format("USER_NAME:%s AGE:%d", userResponse.getUserName(), userResponse.getAge()), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void failure(RetrofitError error) {

            }
        });
    }

RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("URL")
.setConverter(new GsonConverter(new Gson()))
.build();
の部分はおまじないです。

上で定義したInterfaceのインスタンスを取得します。

そのインスタンスを使用してリクエストを投げます。
api.getUser("test", 23, new Callback()
この例だとtestさんが23才です。

あとは、成功すればsuccessが呼ばれるので自由にいじれます。

今回のプログラムに対応するリクエストを処理するGoのサンプル記事を以下に用意しています。
http://soba-ha-kenkou.hatenablog.com/entry/2015/09/29/224852

今回のソースコード一式は以下にあります。
https://github.com/k-shimoju/android/tree/master/Retrofit