Retrofit - 학교 급식 통신
완성된 예제
먼저 Retrofit2 이란?
HTTP REST API 통신( Http 통신 라이브러리 )을 사용할때 쓰는 라이브러리 입니다.
가장먼저 이 라이브러리를 사용하기전에
build.gradle (app) 에 추가해줘야합니다.
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'implementation 'com.squareup.okhttp3:logging-interceptor:3.4.2'
}
그리고 네트워크 (인터넷) 을 사용하기위해 manifests 에
<uses-permission android:name="android.permission.INTERNET"/>
이 권환을 추가해주어야합니다.
자 준비가 끝났으면 이제 사용방법에대해 알아보도록 하겠습니다.
일단 Json 형태의 REST API 를 사용해야하는데요
저는 간단한 저희학교 급식 api 를 기준으로 설명해드리도록 하겠습니다.
이 날 저희학교 급식 API 입니다
1. 먼저 이 data 를 저장할 data 객체를 만들어 주겠습니다
beans.kt
data class lunch(val date:String,val menu:String,val day:String)
이렇게 코틀린을 쓰면 data 객체를 간단히 구현가능합니다
getter, setter 를 내부적으로 구현을해줍니다.
(String 형태로 내용을 받아오기때문에 데이터 타입은 String 형태로 받아줌)
먼저 날짜를 저장할 date 라는 변수,
그리고 우리가 원하는 메뉴를 저장할 menu 라는 변수,
그리고 오늘이 무슨요일인줄 알려주는 day 라는 변수를 만들어 주었습니다.
2. 이제 API 서비스를 만들어줄거입니다 (인터페이스 만들기).
Service.kt
interface UserService {
@GET("받아올 API 의 URL")
fun ApiService(): Call<lunch>
}
인터페이스를 선언해주고 @GET annotation 을추가하고
ApiService() 라는 함수에 받아올데이터 타입을
lunch (위에 만든 data 객체 이름) 데이터 타입으로 해줍니다.
3. Retrofit 초기화 해주기
MainActivity.kt
(일부분)
val retrofit = Retrofit.Builder()
.baseUrl("적어줄 baseUrl ")
.addConverterFactory(GsonConverterFactory.create())
.client(createOkHttpClient())
.build()
val service = retrofit.create(UserService::class.java)
이런식으로 Retrofit 을 초기화를 해주는데
간단히 baseUrl 을 적어서 초기화 해줍니다.
이렇게 초기화 해준뒤 Retrofit 을 생성해주는데요
그럼 이제 UserService 를 retrofit을 통해 생성을 해줍니다
그이후 service 를 통해 retrofit 을 사용하면됩니다.
그리고 대부분 서버는 json 으로 응답을 해주는데요
Retrofit 에서는 이러한 응답을 간단하게 변활할 수 있도록 Converter 를 지원해줍니다.
추가해줄수있는 방법은 바로
.addConverterFactory(GsonConverterFactory.create())
인데요
여기서 GsonConverterFactory.create() 를 추가해주는 이유는
통신이 완료된후 어떤 Converter 를 사용하여 데이터를 파싱할 것인지에 대한 설정을 해줘야해서 추가를 했습니다.
그리고 service 로 Retrofit 을 사용가능합니다.
Service.kt
interface UserService {
@GET("받아올 API 의 URL")
fun ApiService(): Call<launch>
}
그럼 이러한 인터페이스를 사용할수있습니다.
이제 Retrofit 과 인터페이스랑 연결을 해줬습니다
4. Retrofit 에서 응답받은 데이터 처리
MainActivity.kt
private fun setRetrofit(){
val retrofit = Retrofit.Builder()
.baseUrl("http://api.hansei.us/")
.addConverterFactory(GsonConverterFactory.create())
.client(createOkHttpClient())
.build()
val service = retrofit.create(UserService::class.java)
val call:Call<launch> = service.ApiService()
call.enqueue(object : Callback<launch>{
override fun onFailure(call: Call<launch>, t: Throwable) {
Toast.makeText(applicationContext,"실패",Toast.LENGTH_SHORT).show()
}
override fun onResponse(call: Call<launch>, response: Response<launch>) {
if(response.body()!=null){
Toast.makeText(applicationContext,"성공",Toast.LENGTH_SHORT).show()
text1.text = response.body()!!.date + " 입니다"
text2.text = response.body()!!.menu
text3.text = response.body()!!.day + "요일 입니다."
}
}
})
}
MainActivity.kt 의 일부분입니다
준비가 끝났으니 실제 HTTP 통신을 하고 결과를 받아보는코드입니다.
실질적으로 사용할 call 이라는 객체를 만들어줍니다.
enqueue() 메소드를 이용하여 요청을 처리해줍니다 그리고
해당 메소드에 Callback interface 를 구현해주면
Callback interface 는 onResponse 와 onFailure 를 구현을 해줘야합니다.
|
|
자 이런식으로 처리가 되면 성공할경우 서버에서 가져온 급식정보를 원하는 Activity 에
TextView 에 설정이 됩니다.
간단히 통신을 성공했으면 이제
OkHTTP을 사용하여 Retrofit 의 로그를 확인해보자.
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.2'
사용을 위해 위에 2개의 dependencies 를 추가 해줬습니다.
그리고 간단히 예제 코드를 작성합니다.
private fun createOkHttpClient(): OkHttpClient {
val builder = OkHttpClient.Builder()
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
builder.addInterceptor(interceptor)
return builder.build()
}
그리고 아까 위부분에 정의한
val retrofit = Retrofit.Builder()
.baseUrl("http://api.hansei.us/")
.addConverterFactory(GsonConverterFactory.create())
.client(createOkHttpClient())
.build()
.client() 에
메소드를 추가해주면됩니다.
그리고 빌드를 해주신다면
이와 같이 통신이 됬는지 확인을 할수있습니다. |
끝으로 Retrofit2 + OkHttp3 를 이용한 학교급식 통신을 해본 예제입니다.
굳