article thumbnail image
Published 2022. 5. 9. 11:19

Retrofit

 

코틀린과 자바에서 사용하는 라이브러리, http 통신을 통해

서버에서 앱으로 API을 제공한다.

 

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

 

 

build.gradle 내부

    implementation 'com.squareup.retrofit2:retrofit:(insert latest version)'
    implementation 'com.squareup.retrofit2:converter-gson:(insert latest version)'
    implementation 'com.google.code.gson:gson:(insert latest version)'
 

retrofit, gson의 기능을 사용하기 위해 종속

(insert latest version)을 지우고 retrofit, gson 버전을 입력한다.

 

Manifest 권한부여 (인터넷)

<uses-permission android:name="android.permission.INTERNET"/>
 

 

자바 interface GET방식

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}
 

코틀린 interface GET방식

interface GitHubService {

    @GET("/api/search.api?output=json") //API신청한 곳 요청 URL
    fun getapi(
        @Query("key") Key : String //서버에 가져올 값
    ) : Call<data>
 

interface GitHubService는 구현체가 아님으로 빌더패턴 사용

        val retrofit = Retrofit.Builder()
            .baseUrl("https://") //api의 첫 도메인 주소
            .addConverterFactory(GsonConverterFactory.create())
            .build()
       val gitHubService = retrofit.create(GitHubService::class.java)

      gitHubService.getapi("//실제 api 키값")

      .enqueue(object: Callback<DataDTO> {
      // Retrofit 객체에 enqueue()를 사용하여 서버와 통신했을 때 콜백을 작성하여 사용한다.
}
 

 

 

리턴형 Call< > 반환형을 넣기 위해 data class 생성 (JSON = data class)

data class data (
    @SerializedName("itemId") val id : Long, //@SerializedName을 사용하면 api json 정보를 연결 가능
    @SerializedName("title") val title : String,
)
 

API에 itemId와 val id에 이름이 달라도 연결 시켜줌

 

DB에 접하는 객체 DTO

(Data Transfer Object)

data class DataDTO (
    @SerializedName("title") val title : String,
    @SerializedName("item") val items : List<data>
//List<data> -> itemId, title을 지닌 data class data를 불러온다
//api에서 가져올 item은 특수문자, 숫자, 한영이 나올 수 있음으로 List type으로 지정한다
)
 

 

요약

1. implementation

- gson, gsonconverter, retrofit 사용하기 위해 종속

2. uses permisson

- http 통신을 위해 권한부여

3. Retrofit을 사용하기 위해 객체생성 (Builder 패턴)

( MainActivity.kt )

4. 서비스 생성 interface Service (@GET 방식 api url 요청, @Query 불러올 키, 필수 요청 api)

( interface GitHubService )

5. interface Serivce 비동기 리턴형 Call에 대입할 DTO(data class) 생성

( DataDTO.kt )

6. Call<T> 객체 사용

( MainActivity.kt )

복사했습니다!