Retrofit 은 서버와 클라이언트 간 http 통신을 위한 라이브러리이다.
쉽게 말해 안드로이드 개발시 API를 쉽게 호출할 수 있도록 도와준다.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
두 번째 converter-gson 은 json 으로 날아온 응답 값을 객체로 변환해주는 라이브러리이다.
<uses-permission android:name="android.permission.INTERNET"/>
<application
...
android:usesCleartextTraffic="true"
>
안드로이드 9.0 파이부터는 https 사용을 강제하기 때문에 Api 주소가 https 가 아닌 http 이면 usesCleartextTraffic 을 true로 해주어야 한다
설정을 해주지 않으면 "CLEARTEXT communication to XXXX not permitted by network security policy" 라는 에러가 발생한다.
interface RetrofitService {
@GET("todos/1") // 요청메소드 GET, baseUrl에 연결될 EndPoint 'posts/1
fun getUser(): Call<JsonplaceholderResult>
}
object RetrofitClient {
inline fun <reified T> create(baseUrl: String): T {
return Retrofit.Builder()
.baseUrl(baseUrl) // baseUrl은 반드시 /로 끝나야 하며 아니면 에러가 발생
.addConverterFactory(GsonConverterFactory.create()) // Json을 변환해주는 Gson 변환기 등록
.build().create(T::class.java)
}
}
private val retrofitService by lazy {
RetrofitClient.create<RetrofitService>("http://jsonplaceholder.typicode.com/")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
retrofitService.getUser().enqueue(object: Callback<JsonplaceholderResult> {
override fun onResponse(
call: Call<JsonplaceholderResult>,
response: Response<JsonplaceholderResult>
) {
if (response.body() != null) {
Log.d("ApiTest", response.body().toString())
}
}
override fun onFailure(call: Call<JsonplaceholderResult>, t: Throwable) {
Log.d("ApiTest", "실패 ${t.message}")
}
})
}