사용자 도구

사이트 도구


android:queriedlist
queriedlist

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
android:queriedlist [2025/04/20 11:34] 이거니맨android:queriedlist [2025/04/21 01:06] (현재) 이거니맨
줄 1: 줄 1:
-===== 기초 지식 =====+===== 참고할 기초지식 =====
  
 데이터를 쿼리하여 정렬하는 것은 관련 UI도 매우 중요하다. UI를 참조할 수 있는 샘플은 구글에서 제공하는  데이터를 쿼리하여 정렬하는 것은 관련 UI도 매우 중요하다. UI를 참조할 수 있는 샘플은 구글에서 제공하는 
-[[https://developer.android.com/develop/ui/compose/lists?hl=ko|목록 및 그리드]]에 대한 [[https://developer.android.com/develop/ui/compose/lists?hl=ko|스니펫 모음]]을 참고하자. 매우 잘 되어 있다. +[[https://developer.android.com/develop/ui/compose/lists?hl=ko|목록 및 그리드]]에 대한 [[https://github.com/android/snippets/blob/d68fdfb1aef23b977360432c83150d8e34a00e97/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt|스니펫 모음]]을 참고하자. 매우 잘 되어 있다. 
  
  
-===== DAO 예제 =====+===== List 내장 함수를 이용하여 데이터를 다루는 방법 =====
  
-==== 1. Kotlin으로 데이터를 다루는 방법 ====  +위 [[https://github.com/android/snippets/blob/d68fdfb1aef23b977360432c83150d8e34a00e97/compose/snippets/src/main/java/com/example/compose/snippets/lists/AnimatedOrderedList.kt|스니펫 모음]] 예제를 보면 kotlin으로 데이터를 어떻게 다루는지 이해하기가 쉽다. 데이터베이스가 없는 경우에 데이터를 다루는 예제이므로 일어보면 도움이 된다. 
- +
-위 [[https://developer.android.com/develop/ui/compose/lists?hl=ko|스니펫 모음]] 예제를 보면 kotlin으로 데이터를 어떻게 다루는지 이해하기가 쉽다. 데이터베이스가 없는 경우에 데이터를 다루는 예제이므로 일어보면 도움이 된다. +
    
 <code kotlin> <code kotlin>
줄 43: 줄 41:
  
  
-==== 2. Room 데이터베이스에서 데이터 정렬하기 ====+====Room 데이터베이스에서 데이터 정렬하기 =====
  
 이제 데이터베이스를 이용할 경우를 살펴보도롣ㄱ 하자  이제 데이터베이스를 이용할 경우를 살펴보도롣ㄱ 하자 
  
-=== . DAO 만들기 ==== +==== 1SQL 쿼리 DAO 만들기 ==== 
  
 그렇다면 실제 RoomDatabase를 이요할 경우 데이터를 정렬하는 샘플을 만들어 보자  그렇다면 실제 RoomDatabase를 이요할 경우 데이터를 정렬하는 샘플을 만들어 보자 
줄 74: 줄 72:
     fun getAllScores() : LiveData<List<Score>>     fun getAllScores() : LiveData<List<Score>>
  
-    @Query("SELECT * FROM SCORE ORDER BY quoteTitle ASC"+    @Query("SELECT * FROM SCORE ORDER BY " + 
-    fun getAllScoresByTitleASC() : LiveData<List<Score>>+            "CASE WHEN :sortMethod='TitleASC'  THEN quoteTitle END ASC, quoteSection ASC," + 
 +            "CASE WHEN :sortMethod='TitleDESC' THEN quoteTitle END DESC, quoteSection ASC," + 
 +            "CASE WHEN :sortMethod='DateASC' THEN createdAt END ASC," + 
 +            "CASE WHEN :sortMethod='DateDESC' THEN createdAt END DESC") 
 +    fun getScoreList(sortMethod : String) : LiveData<List<Score>> 
 +
 +</file>  
  
-    @Query("SELECT * FROM SCORE ORDER BY quoteTitle DESC"+인자로 받은 sortMethod에 따라서 ORDER BY가 바뀌게 하는 쿼리를 위와 같이 만들었다. 
-    fun getAllScoresByTitleDESC() : LiveData<List<Score>>+
  
-    @Query("SELECT * FROM SCORE ORDER BY createdAt ASC") 
-    fun getAllScoresByDateASC() : LiveData<List<Score>> 
  
-    @Query("SELECT * FROM SCORE ORDER BY createdAt DESC"+==== 2. ViewModel ====  
-    fun getAllScoresByDateDESC() : LiveData<List<Score>>+ 
 +=== 가. Sort 클래스 === 
 + 
 +다음과 같이 sealed class를 만들었다. 
 + 
 +<code kotlin> 
 +sealed class Sort() { 
 +    object TitleASC : Sort() 
 +    object TitleDESC Sort() 
 +    object DateASC : Sort() 
 +    object DateDESC : Sort()
 } }
-</file>+</code>  
 + 
 +=== 나. ViewModel 함수 === 
 + 
 +각 경우에 따라 Dao를 불러오는 함수를 다음과 같이 만들었다. 
 + 
 +<code kotlin> 
 +    fun scoreList() : LiveData<List<Score>>
 +        return scoreDao.getAllScores() 
 +    } 
 + 
 +    fun scoreList(sortMethod : Sort) : LiveData<List<Score>>
 +        return when (sortMethod) { 
 +            Sort.DateASC -> scoreDao.getScoreList("DateASC"
 +            Sort.DateDESC -> scoreDao.getScoreList("DateDESC"
 +            Sort.TitleASC -> scoreDao.getScoreList("TitleASC"
 +            Sort.TitleDESC -> scoreDao.getScoreList("TitleDESC"
 +        } 
 +    } 
 +</code>  
 + 
 + 
 +==== 3. 불러오기 ====  
 + 
 +View화면에서는 다음과 같이 불러오면 된다.  
 + 
 +<code kotlin> 
 +    val sortMethod = remember { mutableStateOf<Sort>(Sort.TitleASC) } 
 + 
 +    val scoreList by viewModel.scoreList(sortMethod.value).observeAsState() // 점수 목록 
 + 
 + 
 +    OrderButtons(sortByTitleASC = { sortMethod.value = Sort.TitleASC }, 
 +        sortByTitleDESC = { sortMethod.value = Sort.TitleDESC}, 
 +        sortByDateASC =  { sortMethod.value = Sort.DateASC }       ) 
 +</code>
android/queriedlist.1745116453.txt.gz · 마지막으로 수정됨: 2025/04/20 11:34 저자 이거니맨