エンジニアとして日々学んだこと、躓いたこと、役に立ちそうなことを発信しています。

  1. 開発

Retrofit2 + Java でAPIコールを実装する

Androidで通信処理を行うためのライブラリRetrofit2を使って、APIコールを実装します。

目次

Retrofit2をGradleに追加

Retrofit公式サイトの記載に従ってGradleに追加します。

GRADLE
implementation ‘com.squareup.retrofit2:retrofit:(insert latest version)’

2023年9月現在最新バージョンは「2.9.0」です。「insert latest version」を変更して、dependenciesに追記します。

 

dependencies {
    :
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
}

利用するAPI

今回は郵便番号データ配信サービスzipcloudさんのAPIを利用します。郵便番号を渡してメッセージ、住所、ステータスを取得します。

データを受け取るクラスを用意

APIから受け取った情報をZipResponseクラスで保持します。住所は複数の場合があるため、Listで用意します。

public class ZipResponse {
    String message;
    List<Adderess> results;
    int status;
}

住所をAddressクラスで保持します。変数はAPIから戻り値の名前と一致させます。

public class Address {
    private String address1;
    :

    public Address(String address1, String address2, String address3,
            String kana1, String kana2, String kana3,
            String prefcode, String zipcode) {
        this.address1 = address1;
        this.address2 = address2;
        this.address3 = address3;
        this.kana1 = kana1;
        this.kana2 = kana2;
        this.kana3 = kana3;
        this.prefcode = prefcode;
        this.zipcode = zipcode;
    }

    public String getAddress1() {
        return address1;
    }

    :

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    :

}

インターフェースを用意

郵便番号をクエリの引数として渡すインターフェースを用意します。

public interface ApiInterface {
    @GET("api/search")
    Call API(@Query("zipcode") String zipcode);
}

APIコール

MainActivityに実際の処理を書いていきます。郵便番号「1500001」を渡して、受け取った情報をログで出力します。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 郵便番号から住所を取得するAPI
        String baseUrl = "http://zipcloud.ibsnet.co.jp/";
        // 郵便番号ハイフンなし
        String zipcode = "1500001";

        Retrofit retro = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        ApiInterface service = retro.create(ApiInterface.class);
        Call btc = service.API(zipcode);

        btc.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                if (response.isSuccessful()) {
                // 通信結果を受け取る
                ZipResponse zipResponse = response.body();

                // レスポンスコード
                Log.d("Retrofit2_Java", "response_code : " + response.code());
                // 実際に叩いたAPIのURL
                Log.d("Retrofit2_Java", "url : " + response.raw().request().url());
                // 通信結果からメッセージを取得
                Log.d("Retrofit2_Java", "message : " + zipResponse.message);
                // 通信結果からステータスを取得
                Log.d("Retrofit2_Java", "status : " + zipResponse.status);

                // 通信結果から住所を取得
                for(Address address : zipResponse.results) {
                    Log.d("Retrofit2_Java", "address1 : " + address.getAddress1());
                    Log.d("Retrofit2_Java", "address2 : " + address.getAddress2());
                    Log.d("Retrofit2_Java", "address3 : " + address.getAddress3());
                    Log.d("Retrofit2_Java", "kana1 : " + address.getKana1());
                    Log.d("Retrofit2_Java", "kana2 : " + address.getKana2());
                    Log.d("Retrofit2_Java", "kana3 : " + address.getKana3());
                    Log.d("Retrofit2_Java", "prefcode : " + address.getPrefcode());
                    Log.d("Retrofit2_Java", "zipcode : " + address.getZipcode());
                }

                } else {
                // 通信が成功したが、エラーcodeが返ってきた時
                Log.d("Retrofit2_Java", "error_code" + response.code());
                }
            }

            @Override
            public void onFailure(Call call, Throwable t) {
            // 通信が失敗した時
            Log.d("Retrofit2_Java", "onFailure" + t.getMessage());
            }
        });
    }
}

開発の最近記事

  1. Retrofit2 + Java でAPIコールを実装する

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

カテゴリー

アーカイブ
PAGE TOP