📚DB 데이터 구조 설명
- 강의에서 진행한 Song Data Class에 albumIdx 값을 추가
- albumIdx에 AlbumTable의 PrimaryKey값 할당 (구분해줄 값이기 때문에 autogenerate X)
- 해당 albumIdx로 각 song이 어떤 Album의 노래인지 구분 가능
- AlbumFragment와 HomeFragment에서 DB 를 사용해서 받아온 부분은
//ROOM-DB
로 주석 처리 해주었으니 확인 바랍니다!
<aside>
💡 테이블에는 list가 들어갈 수 없습니다!
즉, Album Table 의 id 값을 SongTable의 albumIdx 값을 사용해서 데이터를 구분해 줍니다.
</aside>
🎨DB 사용 설명! → 바뀐부분 위주 설명
- [MainActivity] DB에 더미데이터 삽입
inputDummyAlbums()
inputDummySongs()
- [SongActivity] DB 더미데이터 받아오기
initPlayList()
- → SongDao()getSongs()
- 앨범DB 사용해서 앨범의 음악 리스트만 저장 가능
initSong()
- 현재 보여지고 있는 song의 id 값받아와서 nowPos를 찾아줌
getPlayingSongPosition(songId: Int): Int
- song의 id 값과 DB에서 받아온 songs를 비교해서 nowPos 찾는 함수
startTimer()
- 스레드 재시작 mediaPlayer 와 스레드의 동기화
setPlayer(song: Song)
initClickListener()
- 클릭 리스너 초기화
setPlayerStatus(isPlaying: Boolean)
- 플레이버튼 클릭 시 isPlaying에 따라서 데이터 랜더링 및 songs[nowpos],스레드 정보 변경
setLike(isLike: Boolean)
- 좋아요 버튼 누를 시 좋아요 상태에 따라서 데이터 랜더링 및 songs[nowpos],DB 정보 변경
moveSong(direct: Int)
- nowPos를 +1 혹은 -1해줌
- 스레드를 songs[nowPos]에 맞게 종료 후 시작
- 미디어 플레이어 리소스해제
- setPlayer()로 데이터 동기화
onPause()
- songs[nowPos]의 id 저장
- songs의 정보는 db에 업데이트 되는건 isLike 값 밖에 없으므로 MainActivity와 동기화 하려면 추가적으로 업데이트 필요
- SavedSongFragment
- SongRVAdapter
- 내부에서 songs 조작
addSongs(songs: ArrayList<Song>)
내부 songList업데이트
removeSong(position: Int)
내부 songList의 poiston값을 받아서 삭제
- 인터페이스 콜백 함수를 달아서 외부에 songs[position].id 값 전달
- songs[position].id 값으로 DB isLike 업데이트
- 실습 외 변경 사항
- 위 데이터 베이스 구조 구현
- AlbumIdx로 Song테이블에서 어느 album에 해당하는 Song인지 파악
- →
songDao().getSongsInAlbum(albumIdx: Int): List<Song>
로 받아올 수 있음
- [HomeFragment] albums에 AlbumData 삽입
- [HomeFragment] album → AlbumFragment로 데이터 전달
- [AlbumFragment]
songDao().getSongsInAlbum(album.id)
로 해당하는 album의 song 데이터들 받아오기
MainActivity SongActicity 구조도 참고!