Retrofit

차누·2023년 5월 31일
0

Retrofit에 대하여 제가 이해한 내용을 정리하기위해 작성

Retrofit이란

  • Retrofit은 앱 개발 시 서버통신에 사용되는 HTTP API를 자바, 코틀린의 인터페이스 형태로 변환해 안드로이드 개발 시 API를 쉽게 호출할 수 있도록 지원하는 라이브러리

  • Local DB와 서버의 연결을 도와 데이터를 사용하거나 저장할 수 있도록 지원해주는 역할

Retrofit 예제

DataBinding을 사용하여 텍스트뷰에 서버에서 받아온 데이터를 보여지는 어플리케이션을 연습해보았다.

Manifest.mxl

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

build.gradle(:app)


    buildFeatures {
        dataBinding = true
    }

 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
 implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

RetrofitInstance.kt

Retrofit 객체를 생성해 웹서버를 연결하여 초기화하고 이 Retrofit 객체를 통해 인터페이스를 사용하도록 한다. 한번만 초기화

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

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
    }


}

Myapi.kt

이 클래스를 통해서 사용자와 상호작용을 한다. 생성한 객체를 통해 서버에 요청을 하면
데이터를 추가, 삭제 등 가능하게 해준다.

interface MyApi {

    @GET("posts/1")
    fun getPost1() : Call<Post>

    @GET("posts/{number}")
    fun getPostNumber(
        @Path("number") number : Int
    ) : Call<Post>

    //함수를 쓸려면 Call<post>를 받아와야됌
    @GET("posts/{id}")
    fun getId(
        @Path("id") id : Int
    ) : Call<Post>

}

MainActivity.kt

서버에서 받은 데이터는 gson 형태로 저장된다. 텍스트뷰에 보여지기 위해 String 형태로 변환하여 UI에 보여짐



class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        
        //Retrofit 객체 초기화
        val api = RetrofitInstance.getInstance().create(MyApi::class.java)

        //인터페이스의 메소드 받아 서버에 요청
        api.getPost1().enqueue(object : retrofit2.Callback<Post> {

            override fun onResponse(call: Call<Post>, response: Response<Post>) {
                //서버에 응답 대기
                
                //response.body에 있는 내용을 data 변수에 담는다
                val data : String = response.body().toString()
                binding.text.text = data
            }

            override fun onFailure(call: Call<Post>, t: Throwable) {
                Log.d("API", "fail")
            }
        })

mainactivity.xml

<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text"
        android:id="@+id/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
profile
to be good programmer

0개의 댓글