IDE/Android Studio

[AndroidStudio][Kotlin] Retrofit, 레트로핏으로 api 사용하기

  • -

Retrofit이란?

Retrofit 은 서버와 클라이언트 간 http 통신을 위한 라이브러리입니다.

안드로이드에서 통신에 사용되는 코드들을 간편하게 사용할수 있게 하여

http요청과 JSON 형식의 데이터를 사용하는데 용이합니다.

레트로핏 사용 방법

mainfest 수정하기

<application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

레트로핏을 사용할 때 네트워크를 사용해야 하므로

위 코드를 mainfest에 적어 (uses-permition만) 네트워크 연결을 할 수 있게 합니다.

build.gradle

implementation 'com.squareup.retrofit2:retrofit:2.9.0' // 레트로핏 
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 역직렬화할 수 있게

build.gradle 파일에 위 코드를 추가합니다.

이 때 gson도 추가하는 이유는, 레트로핏은 요청을 보내는데 도와줄 뿐이지, JSON 데이터를 역직렬화 하는 것은 converter-gson이기 때문입니다.

실제 사용 코드

서비스 코드 작성

package com.example.retrofitstudy

import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path

data class Product(val id: Int,
                   val title: String)

interface ProductService {
    @GET("/products/{id}")
    fun getProduct(@Path("id") id:Int) : Call<Product>

}

요청 보내기

ActivityMain

package com.example.retrofitstudy

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import retrofit2.*
import retrofit2.converter.gson.GsonConverterFactory

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val retrofit= Retrofit.Builder()
            .baseUrl("https://dummyjson.com")
            .addConverterFactory(GsonConverterFactory.create()) // Json데이터를 사용자가 정의한 Java 객채로 변환해주는 라이브러리
            .build() //레트로핏 구현체 완성

        val productService = retrofit.create(ProductService::class.java)
        val call = productService.getProduct(1) // 요청을 할 수 있는 것
        call.enqueue(object : Callback<Product> {
            override fun onResponse(call: Call<Product>, response: Response<Product>) {
                val body = response.body() as Product
                body.let {
                    Log.d("mytag", it.toString())
                }
            }

			// 실패 시 호출되는 메서드
            override fun onFailure(call: Call<Product>, t: Throwable) {
                Log.d("mytag", "실패")
            }

        })  // 비동기 요청
    }
}

* 코드 설명 추가 예정

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.