Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Android] API 요청 본문

Project/대중교통 길찾기

[Android] API 요청

Seung__ 2022. 4. 19. 00:09

1. 개요


백엔드 서버와 통신하는 네트워크 서비스의 레이어를 만들고 필요한 데이터를 가져온다.

이러한 구현을 위해 Retrofit이라는 라이브러리 사용.

ViewModel은 네트워크 계층과 직접 통신하며 필요한 데이터를 가져옴.

ViewModel에서 데이터 결합과 함꼐 LiveData를 사용하여 데이터 변경 시 UI 업데이트 할 예정.

 

 

2. Retrofit 라이브러리 추가.


Android Gradle을 사용하면 외부 라이브러리를 프로젝트에 추가할 수 있습니다.

라이브러리 종속 항목 외에도 라이브러리가 호스팅되는 저장소도 포함해야 합니다.

Jetpack 라이브러리의 ViewModel  LiveData와 같은 Google 라이브러리는 Google 저장소에 호스팅됩니다.

 

  • 모듈 수준 Gradle 파일 build.gradle 
  • dependencies 섹션에서 다음과 같은 Retrofit 라이브러리 줄을 추가
    // Retrofit
    implementation "com.squareup.retrofit2:retrofit:2.9.0"
    // Retrofit with Moshi Converter
    implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
    // GSON
    implementation "com.squareup.retrofit2:converter-gson:2.6.0"

첫 번째 종속 항목은 Retrofit2 라이브러리 자체와 관련되며,

두 번째 종속 항목은 Json을 String로 바꾸는 라이브러리 관련.

세 번째 종속 항목은 Json을 객체로 바꾸는 라이브러리 관련.

 

3. 자바 8 언어 기능 지원 추가하기


Retrofit2를 비롯한 많은 타사 라이브러리는 자바 8 언어 기능을 사용합니다.

Android Gradle 플러그인에는 특정 자바 8 언어 기능을 위한 지원이 내장되어 있습니다.

  • 이 내장 기능을 사용하려면 모듈의 build.gradle 파일에 다음 코드가 필요
  • 모듀수준 build.gradle(Module: MarsPhotos.app).에 다음 코드가 있는지 확인
android {
  ...

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  kotlinOptions {
    jvmTarget = '1.8'
  }
}

 

 

4. 인터넷 연결


Retrofit은 웹 서비스의 콘텐츠를 기반으로 앱의 네트워크 API를 만든다.

Retrofit은 JSON과 같이 많이 사용하는 데이터 형식을 위한 지원이 내장되어 있ㅇㅁ.

Retrofit은 이 서비스를 호출하고 소비하는 코드를 만든다.

 

 

5. 구현 단계


네트워크 계층이 ApiService클래스 생성

기본 URL및 변환기 factory가 포함된 Retrofit 객체 생성

Retrofit이 웹 서버와 통신하는 방법을 설명하는 인터페이스 생성

Retrofit 서비스를 만들고 앱의 나머지 부분에 고나해 인스턴스API를 서비스에 노출

 

 

 

6. ApiService.kt


기본 URL상수 추가

companion object {
    private const val BASE_URL = "http://15.164.162.177:8080/withJson"
}

 

Retrofit에서는 웹 서비스의 기본 URI 및 변환기 팩토리가 있어야 웹 서비스 API를 빌드할 수 있습니다.

변환기는 웹 서비스에서 얻은 데이터로 해야 할 일을 Retrofit에 알립니다.

이 경우에 JSON응답을 가져와 일단 String으로 변환 하려고 함.

factory에 baseUrl을 넣어주고 Build()를 호출하여 Retrofit 객체 생성.

    private val retrofit = Retrofit.Builder().addConverterFactory(ScalarsConverterFactory.create())
        .baseUrl(BASE_URL)
        .build()

 

객체 선언.

Rretrofit 객체에서 create() 호출은 리소스가 많이 필요하다. 또한 앱에서는 API서비스 인터페이스의 인스턴스는 하나만 필요.  즉 싱글톤으로 만들어 줘야 한다.

 

Service Interface 선언 외부에서 Api라는 object를 정의하여 Retrofit서비스를 초기화 하자.

이 객체는 앱의 나머지 부분에서 액세스할 수 있는 공개 싱글톤 객체임.

이 때 지연 초기화를 사용한다.

실제 retrofitService를 호출할 때  ApiService의 인스턴스가 만들어지며 retrofit을 초기화 한다.

object Api{
    val retrofitService: ApiService by lazy{
        retrofit.create(ApiService::class.java)
    }
}
class ApiService {

    companion object {
        private const val BASE_URL = "http://15.164.162.177:8080/withJson"
        private val retrofit = Retrofit.Builder().addConverterFactory(ScalarsConverterFactory.create())
            .baseUrl(BASE_URL)
            .build()


    }

    object Api{
        val retrofitService: ApiService by lazy{
            retrofit.create(ApiService::class.java)
        }
    }

    interface ApiService{
        @GET()
        fun getData(@Query("start") start: String, @Query("middle") middle: String,@Query("end") end: String): String
    }
}

 

 

'Project > 대중교통 길찾기' 카테고리의 다른 글

[Android, Kotlin] JSON to Kotlin Class  (0) 2022.04.30
Background Process : nohup  (0) 2022.04.19
AWS 배포 결과  (0) 2022.04.06
[AWS] EC2에 프로젝트 배포  (0) 2022.04.05
[AWS] RDS 이용한 데이터베이스 생성  (0) 2022.04.05
Comments