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());
}
});
}
}
この記事へのコメントはありません。