0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IntelliJ: Retrofit で HTTP リクエスト (data class を使用)

Posted at

こちらと同じことを行いました。
kotlinでretrofit2を利用してWebAPIからjson形式データを非同期で取得する方法

次の例と受け取る JSON が異なります。
IntelliJ: Retrofit で HTTP リクエスト
IntelliJ: Retrofit で HTTP リクエスト (HashMap)

API の仕様

$ http https://zipcloud.ibsnet.co.jp/api/search?zipcode=1000001
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Length: 287
Content-Type: text/plain;charset=utf-8
Date: Mon, 06 Nov 2023 01:46:20 GMT
Server: Google Frontend
X-Cloud-Trace-Context: b6e49d0061f66fbb2fe79f05a81028cd

{
    "message": null,
    "results": [
        {
            "address1": "東京都",
            "address2": "千代田区",
            "address3": "千代田",
            "kana1": "トウキョウト",
            "kana2": "チヨダク",
            "kana3": "チヨダ",
            "prefcode": "13",
            "zipcode": "1000001"
        }
    ],
    "status": 200
}

環境

build.gradele.kts
(省略)
dependencies {
    implementation ("com.squareup.retrofit2:retrofit:2.9.0")
    implementation ("com.squareup.retrofit2:converter-gson:2.9.0")


    testImplementation(kotlin("test"))
(省略)
}

プログラム

ツリー構造
image.png

Main.kt
import model.ZipApiData
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import service.ZipService
import service.ZipServiceImpl

fun getZipUsingRetrofit(){
    val zipService: ZipService =
        ZipServiceImpl().getZipServiceFactory()

    val call: Call<ZipApiData> = zipService.getZip()

    println("*** check *** aaa ***")
    call.enqueue(object : Callback<ZipApiData> {
        override fun onResponse(call: Call<ZipApiData>,
                                response: Response<ZipApiData>
        ) {
            val dict_aa = (response.body())!!
            println(dict_aa)
            val results = dict_aa.results!!
            println(results)
            val address1 = results[0].address1
            print(address1 + "\t")
            val address2 = results[0].address2
            print(address2 + "\t")
            val address3 = results[0].address3
            println(address3)
        }

        override fun onFailure(call: Call<ZipApiData>, t: Throwable) {
            t.printStackTrace()
        }

    })
}

fun main(){
    println("*** main *** start ***")
    getZipUsingRetrofit()
    println("*** main *** end ***")
}
model/ZipApiData.kt
package model

data class ZipApiData (
    var message: String?,
    var results: List<Results>?,
    var status: Int
)

data class Results(
        var address1: String,
        var address2: String,
        var address3: String,
        var kana1: String,
        var kana2: String,
        var kana3: String,
        var prefcode: String,
        var zipcode: String
)
service/ZipService.kt
package service

import model.ZipApiData
import retrofit2.Call
import retrofit2.http.GET

interface ZipService {
    @GET("/api/search?zipcode=1000001")
    fun getZip(): Call<ZipApiData>
}
service/ZipServiceImpl.kt
package service

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class ZipServiceImpl {

    fun getZipServiceFactory(): ZipService{
        val retrofit = Retrofit.Builder()
            .baseUrl("https://zipcloud.ibsnet.co.jp")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

        return retrofit.create(ZipService::class.java)
    }
}

実行結果

image.png

*** main *** start ***
*** check *** aaa ***
*** main *** end ***
ZipApiData(message=null, results=[Results(address1=東京都, address2=千代田区, address3=千代田, kana1=トウキョウト, kana2=チヨダク, kana3=チヨダ, prefcode=13, zipcode=1000001)], status=200)
[Results(address1=東京都, address2=千代田区, address3=千代田, kana1=トウキョウト, kana2=チヨダク, kana3=チヨダ, prefcode=13, zipcode=1000001)]
東京都	千代田区	千代田
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?