본문 바로가기
개발일기

23.10.06 86일차 TIL 심화 B강의 정리

by 빛나는맛과탕탕 2023. 10. 6.
반응형

 

VideoSearch로 만듬

(기존에는 동영상만 서치하려고 만들었으나 해설강의에 둘다 서치되게끔 구현해놔서 같이 됨)

 

레이아웃을 만들어서 적용

 

아이콘을 PNG -> SVG -> XML파일로 만들어서 적용

 

버튼색 변경도 쉽지 않았음.

 

VIDEO와 IMAGE를 둘다 서치하는 API를 구현

 

Retrofit_client.kt

object retrofit_client {

    //API 서비스 객체 반환
    val apiService: Retrofit_interface
        get() = instance.create(Retrofit_interface::class.java)

    private val instance: Retrofit
        private get() {
            val gson = GsonBuilder().setLenient().create()

            return Retrofit.Builder()
                .baseUrl(net.flow9.thisiskotlin.videosearch.Constants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build()
        }




}

 

 

Retrofit_interface

interface Retrofit_interface {

    @GET("v2/search/image") //대문자 V2가 아니라 소문자 v2
    fun image_search(
        @Header("Authorization") apiKey: String?,
        @Query("query") query: String,
        @Query("sort") sort: String?,
        @Query("page") page: Int,
        @Query("size") size: Int
    ): Call<ImageModel>

    @GET("v2/search/vclip") //대문자 V2가 아니라 소문자 v2
    fun video_search(
        @Header("Authorization") apiKey: String?,
        @Query("query") query: String,
        @Query("sort") sort: String?,
        @Query("page") page: Int,
        @Query("size") size: Int
    ): Call<VideoModel?>?

}

 

Constants.kt

/**
 * Constants 객체는 앱 전체에서 공통적으로 사용되는 상수 값을 모아둔 싱글턴 객체
 * 의미있는 이름을 갖는 상수를 사용 가능
 * 가독성 유지보수성 증가
 */

object Constants {
    // 기본 API 엔드포인트.
    // 여기서 모든 API 요청의 기본 URL
    var BASE_URL = "https://dapi.kakao.com"

    // Kakao API를 사용하기 위한 인증 헤더
    var AUTH_HEADER = "KakaoAK 본인카카오api키값"

    // 이미지 검색을 나타내는 타입 코드
    var SEARCH_TYPE_IMAGE = 0

    // 비디오 검색을 나타내는 타입 코드
    var SEARCH_TYPE_VIDEO = 1

    // 이미지 "좋아요" 상태 저장을 위한 Shared Preferences 키
    //var PREF_KEY = "IMAGE_LIKE_PREF"
}

 

 

SearchModel

data class SearchModel (
    var type : Int, // 타입
    var title: String, // 제목
    var dateTime: String, // 시간
    var url: String, // url 주소

    var isLike: Boolean = false // 좋아요 부분
)

 

 

<?xml version="1.0" encoding="utf-8"?>
<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=".DetailActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="UselessParent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="20dp">

            <!-- 내용을 스크롤할 레이아웃 -->
            <!-- 여기에 필요한 UI 요소들을 추가하세요 -->

        </androidx.constraintlayout.widget.ConstraintLayout>

    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

<!-- 해당 스크롤뷰 적용시에코드-->
반응형