728x90
반응형
8주차 - RoomDB 활용하기
🍀구현영상 및 설명
- 이전 주차에 bundle을 활용해서 Activity와 Fragment간 데이터를 전달했던 것을 모두 RoomDB로 바꾸어서 만들었다.
- RoomDB를 활용해 메모 수정, 삭제, 추가 기능을 구현하였다.
- 메모 리스트 RV에서 item 클릭시 해당 리스트의 메모 id를 받아오고 이를 매개변수로 활용해 각 메모를 수정 및 삭제 했다.
- FrameLayout을 활용해 즐겨찾기 toggle를 구현하고, 보관함에 즐겨찾기 메모가 담기도록 하였다.
- 사용한 각 Query는 다음과 같다.
@Dao
interface MemoDao {
//메모 추가
@Insert
fun insert(memo:MemoData)
@Delete
fun delete(memo:MemoData)
//메모 삭제 (memoId 이용)
@Query ("DELETE FROM MemoData WHERE memoId=:memoId")
fun deleteMemo(memoId:Int)
// 메모 전체 불러오기
@Query("SELECT * FROM MemoData")
fun selectAllMemo() : MutableList<MemoData>
// 특정 메모 불러오기 (memoId 이용)
@Query("SELECT * FROM MemoData WHERE memoId=:memoId")
fun selectOneMemo(memoId:Int) : MemoData
//메모 내용 수정 및 즐겨찾기 변경
@Query("UPDATE MemoData SET title = :title, content = :content, day = :day, color = :color, favorite = :favorite WHERE memoId=:memoId")
fun updateMemo(memoId:Int,title:String?,content:String?,day:String?,color:String?,favorite:Boolean)
//좋아요 메모들만 가져오기
@Query("SELECT * FROM MemoData WHERE favorite=:favorite")
fun selectFavorite(favorite: Boolean) : MutableList<MemoData>
}
🍀코드
UMC_Android/week8 at master · ss99x2002/UMC_Android
🍀트러블슈팅
dataList 업데이트 문제
- 문제 : RoomDB에서 Select, Delete, Update 등을 해서 가져온 List가 RecyclerView에 바로 적용되지 않는 문제가 발생했다.
- 원인: RoomDB에서 리스트를 리턴 받을 때 List<> 자료형으로 받아서 List가 변경되었을때 처리를 못했던 것이다.
- 해결: 리턴 값을 MutableList<>로 받아 set, removeAt 메서드 등을 이용해 List를 변경하고 notify하니 정상적으로 바로 적용되었다.
새로운 메모 추가 시 memo Id 리턴 문제
- 현재 코드에서 메모 수정,삭제 등의 처리를 할때 memoId를 다른 activity로 전달하고, memoId를 통해 roomDB로 해당 메모의 데이터를 가져오는 Query를 작성했다.
- 문제: 이미 생성된 메모의 경우 memoId를 받아와 처리 할 수 있지만, 새롭게 메모를 생성 할 경 수정 및 삭제가 어려운 문제가 발생했다.
- 원인: insert 후 memoId를 리턴 할 방법이 없어서 해당 문제가 발생했다.
- 해결: memoId만을 리턴하는 쿼리를 작성하려 했으나 제목, 내용 등 모든 값을 조건으로 다 입력해야 했기 때문에 다른 방법을 생각했다.
- memoList에 마지막 메모의 id + 1 로 새로운 메모의 id를 부여해주었다.
- 어차피 memoId는 자동으로 증가하기만 하기 때문에, list의 끝에 있는 값보다 더 큰 memoId는 리스트에 존재할 수 없기 때문이다.
- memoList에 마지막 메모의 id + 1 로 새로운 메모의 id를 부여해주었다.
728x90
반응형
'IT 동아리 > UMC 3기 (Android)' 카테고리의 다른 글
[UMC/Android] 9주차 - Open API 활용 (0) | 2022.12.02 |
---|---|
[UMC/Android] 7주차 - Thread 이용한 타이머 만들기 (0) | 2022.11.16 |
[UMC/Android] 6주차 - Bottom navigation, TabLayout, ViewPager2 (0) | 2022.11.13 |
[UMC/Android] 5주차 - 메모 어플 만들기 (0) | 2022.11.03 |
[UMC/Android] 3주차 - Activity/Fragment간 데이터 전달 (0) | 2022.10.12 |