트러버 앱을 만들면서 Retrofit을 많이 이용하였는데 ViewModel 과 코루틴과 같이 사용해본 경험은 없어
아쉬움이 큰 프로젝트였다. 따라서 이번 젯팩 인프런 강의를 들으면서 다시 한번 복습하며 ViewModel과 코투린 같이 사용해볼 예정이다.
Retrofit2 관련해서 포스팅했던 링크를 첨부한다!!
개념은 링크를 통해서 보고! 이번 글에서는 젯팩 강의에서 진행했던 실습을 정리해보려고한다!
먼저 서버가 없기 때문에
여기서 제공하는 api를 받아서 사용할 예정이다.
gradle파일에 retrofit 추가를 해주고, manifest파일에도 다음과 같이 권한을 추가해준다.
<uses-permission android:name="android.permission.INTERNET"/>
//retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
이렇게 권한과 gradle파일에 추가했다면!! Retrofit 인스턴스를 생성하자.
object RetrofitInstance {
val BASE_URL = "https://jsonplaceholder.typicode.com/"
val client = Retrofit
.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
fun getInstance() : Retrofit {
return client
}
}
서버에서 받은 api를 사용한다면, 서버에서 생성된 api 주소를 입력하면 된다!!
또한, 해당 링크를 통해서 반환값을 보니 다음과 같아 이에 맞추어 data class도 만들어주자!
data class Post (
val userId : Int,
val id : Int,
val title : String,
val body : String
)
또한, 해당 api에 접근하기 위해 interface를 생성해준다.
interface MyApi {
@GET("posts/1")
fun getPost1() : Call<Post>
@GET("posts/{number}")
fun getPostNumber(
@Path("number") number : Int
) : Call<Post>
}
첫번째는 아이디1번째의 반환값을 반환하는 GET메소드이고, 밑은 id값을 유동적으로 바꿀 수 있는 GET메소드이다.
이 때 Path 변수로 변경을 해주어야하기 때문에 @Path를 적어준다!
api.getPostNumber(3).enqueue(object : Callback<Post>{
override fun onResponse(call: Call<Post>, response: Response<Post>) {
Log.d("API2", response.body().toString())
}
override fun onFailure(call: Call<Post>, t: Throwable) {
Log.d("API2", "fail")
}
})
val api = RetrofitInstance.getInstance().create(MyApi::class.java)
그리고 위와 같이 성공했을 때와 서버와 연결을 실패했을 때 로그를 찍어보았다!
결과값이 잘 로그에 찍힌 것을 알 수 있다!!
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] Coroutine / ViewModelScope (0) | 2022.08.26 |
---|---|
[JETPACK개론] Retrofit의 CallBack Hell (0) | 2022.08.25 |
[JETPACK개론] DataBinding + ViewModel + LiveData (0) | 2022.08.21 |
[JETPACK개론] Map / SwitchMap (0) | 2022.08.20 |
[JETPACK개론] Fragment LiveData / LifeCycleOwner (0) | 2022.08.19 |