Android/Side Projects

도서 리뷰 앱 개발하기

화요밍 2022. 2. 12. 11:48
728x90
반응형
Side Project - Book Review App
인터파크 도서 Open API를 사용해서 베스트 셀러 목록을 보여주고 검색을 통해 책을 검색하는 도서 리뷰 앱 프로젝트

 

 

GitHub - hwayeon351/Book-Review-App

Contribute to hwayeon351/Book-Review-App development by creating an account on GitHub.

github.com


학습 회고

오늘은 검색 히스토리 RecyclerView를 띄우기 위해 검색한 키워드들을 저장하는 DB를 Room 라이브러리를 사용해서 만들었다.

 


오늘 공부한 내용

  • Room 라이브러리

도서를 검색한 히스토리를 앱 내부 저장소에 저장하기 위해서 Room 라이브러리를 사용하였다.

 

Room 구성요소는 다음과 같다.

  • 데이터베이스 클래스 AppDatabase

데이터베이스를 보유하고 내부저장소에 저장된 데이터를 사용하기 위한 기본 액세스 포인트 역할을 하는 AppDatabase 클래스를 만들어 준다. @Database Annotation에 entities를 포함해야 하고, DAO 클래스의 인스턴스를 반환하는 추상 메서드를 정의해야 한다.

@Database(entities = [History::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
    abstract fun historyDao(): HistoryDao
}

 

  • 데이터 항목 Entity

데이터베이스 테이블과 각 필드를 정의하는 데이터 모델 클래스를 작성한다. 기본적으로 클래스 이름이 테이블 이름이 된다.

@Entity
data class History(
    @PrimaryKey val uid: Int?,
    @ColumnInfo(name = "keyword") val keyword: String?
    )

 

  • 데이터 액세스 객체 DAO

데이터베이스의 데이터를 쿼리하고 CRUD하기 위해 사용할 메서드를 정의한다.

@Dao
interface HistoryDao {

    @Query("SELECT * FROM history")
    fun getAll(): List<History>

    @Insert
    fun insertHistory(history: History)

    @Query("DELETE FROM history WHERE keyword == :keyword")
    fun delete(keyword: String)
}

검색창 EditText를 클릭하였을 때, 이전에 검색한 히스토리를 띄우기 위해서 모든 히스토리 목록을 가져오는 getAll() 쿼리 메서드를 @Query Annotation을 사용하여 정의하였다.

또한, 새로운 키워드로 검색하였을 때 히스토리에 데이터를 추가하기 위해 @insert Annotation을 사용하여 SQL문을 작성하지 않고 insertHistory() 메서드를 정의하였다.

검색 히스토리의 x버튼을 클릭하면 해당 키워드를 모두 삭제하기 위해 @Query Annotation을 사용해서 delete() 메서드를 정의하였다.

 

 

  • Thread를 사용해서 데이터베이스 작업 수행하기

데이터베이스 쿼리나 CROUD 작업을 수행하기 위해서 Thread를 생성한다.

데이터베이스 쿼리 결과를 UI에 적용하기 위해서 메인쓰레드에게 Runnable 객체를 전달하는 runOnUiThread를 통해 UI를 업데이트 한다.

Thread {
    val keywords = db.historyDao().getAll().reversed()

    runOnUiThread {
        binding.historyRecyclerView.isVisible = true
        historyAdapter.submitList(keywords.orEmpty())
    }
}.start()

 

 

 

728x90
반응형

'Android > Side Projects' 카테고리의 다른 글

도서 리뷰 앱 개발하기  (0) 2022.02.14
도서 리뷰 앱 개발하기  (0) 2022.02.13
도서 리뷰 앱 개발하기  (0) 2022.02.11
도서 리뷰 앱 개발하기  (1) 2022.02.10
My Alarm 앱 개발하기  (0) 2022.02.09