안드로이드 스튜디오 Retrofit2 사용 방법

이윤진·2023년 1월 29일
0

umc 정보 전달

목록 보기
3/3

서버와 연결을 위해 Retrofit을 사용하려고 합니다.
그 사용 방법에 대한 글입니다!

step.1 build.gradle 설정하기

app 수준의 build.gradle에 사용하고자 하는 retrofit과 gson, okhttp등을 등록합니다.

		implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
        implementation 'com.squareup.retrofit2:retrofit:2.9.0'
        implementation 'com.squareup.retrofit2:converter-simplexml:2.9.0'
        implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'

        implementation "com.squareup.okhttp3:okhttp-urlconnection:4.9.2"
        implementation 'com.squareup.okhttp3:logging-interceptor:4.9.2'
        implementation 'com.squareup.okhttp3:okhttp:4.9.2'

(그대로 복사해서 넣어주세요)

step.2 data class 만들기

서버로부터 받을 데이터가 어떤 형식인지 보고 그대로 data class를 만들어주시면 됩니다.

data class ServerHistoryData(
    @SerializedName("date") var date: String,
    @SerializedName("success") var success : Int,
    @SerializedName("history_id") var historyId : Int
)

(예시입니다)
데이터 형식은 api 명세서에 제시되어있습니다.

이때 더 필요한 정보가 있거나 설명이 필요한 부분은 서버팀에 문의해주시면 됩니다!

step.3 NetworkModule.kt 만들기

(제가 만들어 놓아서 따로 작성하지 않으셔도 됩니다!)

const val BASE_URL = "${base_url}"
private var instance: Retrofit? = null
private val gson = GsonBuilder().setLenient().create()

fun getRetrofit(): Retrofit {
    if (instance == null) {
        val interceptor = HttpLoggingInterceptor()
        interceptor.level = HttpLoggingInterceptor.Level.BODY

        val client = OkHttpClient.Builder()
            .cookieJar(JavaNetCookieJar(CookieManager()))
            .addInterceptor(interceptor)
            .build()

        instance = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build()
    }

    return instance!!
}

step.4 ApiService interface에 기능 작성하기

(ApiService.kt 파일에 작성해주시면 됩니다.)

interface ApiService {
    @GET("/history/list")
    fun getHistoryData():Call<List<ServerHistoryData>>
}

같은 interface에 @GET, @POST 이런 식으로 위의 형식에 맞게 입력해주시면 됩니다.
@GET 뒤에 나오는 url 주소는 base url을 제외한 url을 넣어주시면 됩니다.
작동될 함수 이름을 만들고, 만약 어떤 조건을 제시해서 정보를 요청해야 한다면, 그 정보 파라미터를 함수 파라미터로 적어주시면 됩니다.
Call<>에서 <>에 들어갈 정보는 데이터를 받을 data class 형식입니다.
저는 ServerHistoryData를 List로 받기 때문에 <List<ServerHistoryData>>로 작성했습니다.

step.5 Retrofit 구동하기

val authService = getRetrofit().create(ApiService::class.java)

위와 같이 retrofit 객체를 하나 생성해주세요.

ApiService interface에 작성한 함수가 구동하게 될껍니다!

따라서

authService.getHistoryData().enqueue(object : Callback<List<ServerHistoryData>> {
            override fun onResponse(call: Call<List<ServerHistoryData>>, response: retrofit2.Response<List<ServerHistoryData>>) {
                if (response.isSuccessful) {
                    val data = response.body()

                    if (data != null) {
                    	//데이터가 잘 왔는지 로그 찍어보기
                        Log.d("test_retrofit", "받은 정보 :" + data)
                  } else {
                      //정보를 받지 못했을 때 로그 찍기
                      Log.w("retrofit", "실패 ${response.code()}")
                  }
            }

			//아예 접근을 실패했을 경우
            override fun onFailure(call: Call<List<ServerHistoryData>>, t: Throwable) {
                Log.w("retrofit", "정보 접근 실패", t)
                Log.w("retrofit", "정보 접근 실패 response",)
            }
        })

이렇게 authService.getHistoryData().enqueue 를 작성해주세요!

데이터가 잘 왔다면 파싱해서 적용해주시면 됩니다!

더 필요한 api가 있으면 바로 서버팀께 연락 부탁드립니다!
전체 단톡방에서 연락 주시면 될 것 같습니다!
여러분 같이 파이팅해요~!!

profile
Android/Flutter 개발

0개의 댓글