서버와 연결을 위해 Retrofit을 사용하려고 합니다.
그 사용 방법에 대한 글입니다!
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'
(그대로 복사해서 넣어주세요)
서버로부터 받을 데이터가 어떤 형식인지 보고 그대로 data class를 만들어주시면 됩니다.
data class ServerHistoryData(
@SerializedName("date") var date: String,
@SerializedName("success") var success : Int,
@SerializedName("history_id") var historyId : Int
)
(예시입니다)
데이터 형식은 api 명세서에 제시되어있습니다.
이때 더 필요한 정보가 있거나 설명이 필요한 부분은 서버팀에 문의해주시면 됩니다!
(제가 만들어 놓아서 따로 작성하지 않으셔도 됩니다!)
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!!
}
(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>>
로 작성했습니다.
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가 있으면 바로 서버팀께 연락 부탁드립니다!
전체 단톡방에서 연락 주시면 될 것 같습니다!
여러분 같이 파이팅해요~!!