트러버 앱을 만들면서 Retrofit을 많이 이용하였는데 ViewModel 과 코루틴과 같이 사용해본 경험은 없어
아쉬움이 큰 프로젝트였다. 따라서 이번 젯팩 인프런 강의를 들으면서 다시 한번 복습하며 ViewModel과 코투린 같이 사용해볼 예정이다.
Retrofit2 관련해서 포스팅했던 링크를 첨부한다!!
개념은 링크를 통해서 보고! 이번 글에서는 젯팩 강의에서 진행했던 실습을 정리해보려고한다!
[Android] Retrofit2 사용하기
Retrofit2 ? -Rest API 통신 라이브러리 -Rest API 통신을 위해 구현된 스퀘어사의 OkHttp 라이브러리의 상위 구현체 -android와 서버 환경에서 HTTP API를 쉽고 안전하게 사용할 수 있도록 도와준다. Retrofit을..
ssongcode.tistory.com
먼저 서버가 없기 때문에
JSONPlaceholder - Free Fake REST API
{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. As of Oct 2021, serving ~1.7 billion requests each month.
jsonplaceholder.typicode.com
여기서 제공하는 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)
그리고 위와 같이 성공했을 때와 서버와 연결을 실패했을 때 로그를 찍어보았다!
결과값이 잘 로그에 찍힌 것을 알 수 있다!!
GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library
Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.
github.com
'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 |