android retrofit_glide

Back

Retrofit

API를 호출할때 사용하는 라이브러리다.( http 통신)

사용을 하기 위해서는 Gradle에 추가를 해주어야 한다.

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

converter-gson은 응답결과를 json형태로 변환해주는 라이브러리다.

네트워크 통신을 위해 manifest에 권한을 부여하고 https로 통신을 권장하지만 그럴수 없다면 http로 통신을 해야하기 때문에 트레픽 설정도 해준다.

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

<!-- <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true" -->
        android:usesCleartextTraffic="true"
        <!-- android:theme="@style/Theme.Chapter12">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".DetailActivity"/>
    </application> -->

서비스할 인터페이스를 구성 한다. (메서드 정의)

import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query

interface BookService {
    @GET("/api/search.api?&output=json")
    fun getBooksByName(
        @Query("key") apiKey: String,
        @Query("query")keyword: String
    ): Call<SearchBookDto>

    @GET("/api/bestSeller.api?&categoryId=100&output=json")
    fun getBestSellerBooks(
        @Query("key") apiKey: String
    ):Call<BestSellerDto>
}

응답 받은 객체를 담기위해 data class를 선언한다.

import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.parcelize.Parcelize

@Parcelize
data class Book(
    //@SerializedName = 실제 데이터의 명칭과 동일하게 맵핑
    @SerializedName("itemId") val id: String,
    @SerializedName("title") val title: String,
    @SerializedName("description") val description: String,
    @SerializedName("coverSmallUrl") val coverSmallUrl: String,

): Parcelable //직렬화를 가능하도록 설정

직렬화를 하여 응답받은 데이터를 바로 변환할 수 있도록 해준다.

아래와 같이 레프토핏을 선언하고 인터페이스에 구성한 서비스를 생성하여 응답을 받아온다.

private lateinit var bookService: BookService
val retrofit = Retrofit.Builder()
    .baseUrl("https://book.interpark.com")
        //바로 json형태로 변환하도록 설정
    .addConverterFactory(GsonConverterFactory.create())
    .build()

bookService = retrofit.create(BookService::class.java)

//아래 기능을 사용하기 위해서는 internet 권한을 줘야함
bookService.getBestSellerBooks(getString(R.string.interparkAPIKey))
    .enqueue(object: Callback<BestSellerDto>{
        override fun onResponse(
            call: Call<BestSellerDto>,
            response: Response<BestSellerDto>
        ) {
            //성공처리
            if(response.isSuccessful.not()){
                Log.e(TAG,"NOT SUCCESS!!")
                return
            }
            response.body()?.let {
                //currentList에 리스트를 넘겨준다.
                adapter.submitList(it.books)
            }
        }
        override fun onFailure(call: Call<BestSellerDto>, t: Throwable) {
            //실패처리
            Log.e(TAG, t.toString() )
        }
    })

glide

이미지 로딩을 간편하게 해주는 API이다.

gradle에 의존성 주입 해준다.

implementation 'com.github.bumptech.glide:glide:4.12.0'

이후 아래와 같이 사용하면된다.

//이미지 라이브러리 사용하여 이미지를 binding
Glide
    .with(binding.coverImageView.context) //context
    .load(bookModel.coverSmallUrl) //이미지 경로
    .into(binding.coverImageView) // imageView

전체 코드 보러 가기