{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
getInstance
로 url을 넣어주면 되고,getReference
에 사용할 경로를 넣어주면 된다. private fun initFirebase() {
try {
userId = "BKNnNTkD5kgW1VILsAtiib5Tpks2"
// Firebase Database 인스턴스 초기화
database = FirebaseDatabase.getInstance("https://oneone2-4660f-default-rtdb.asia-southeast1.firebasedatabase.app")
diaryRef = database.getReference("users/$userId/diaries")
Log.d("LIST++", "IN initFirebase")
// 데이터 요청
getFBContentData()
Log.d("LIST++", "after getFBContentData")
} catch (e: Exception) {
Log.e("LIST++", "Firebase initialization failed", e)
}
}
// 예시로 사용할 다이어리 데이터
val diary = Diary(
contentId = 4,
title = "Fourth Diary",
content = "Content of the fourth diary",
timestamp = "2024-06-28",
photoUrl = "https://www.google.com/url?sa=i&url=http%3A%2F%2Fs.blip.kr%2Fc%2F8287ef00&psig=AOvVaw1fTSz_x3W-KyNi7o5BeTXI&ust=1718527711483000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCLia79-c3YYDFQAAAAAdAAAAABAE"
)
// 새로운 다이어리 추가
val newDiaryRef = diaryRef.push()
newDiaryRef.setValue(diary)
valueEventListener
로 데이터를 불러온다. onDataChange
에서 snapshot
을 활용해 가져온 후 미리 만들어둔 Diary 타입의 리스트에 넣어주고, 그걸 어답터로 보낼 것이다. private fun getFBContentData() {
Log.d("LIST++", "IN getFBContentData")
val postListener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
diariesList.clear()
// 데이터 순회하며 저장
for (diarySnapshot in snapshot.children) {
// Diary 객체 저장
val diary = diarySnapshot.getValue(Diary::class.java)
if (diary != null) {
// 리스트에 저장
diary?.let { diariesList.add(it) }
}
}
//notifyDataSetChanged()를 호출하여 adapter에게 값이 변경 되었음을 알려준다.
diaryAdapter.submitList(diariesList)
}
override fun onCancelled(error: DatabaseError) {
// 미정
}
}
diaryRef.addValueEventListener(postListener)
}
바로 보여주는게 아니라 앱에서 정의된 data class가 있어야 어답터에 리스트로 넘겨줄 수 있다.
파이어베이스에 정의된 데이터들과 data class의 필드가 정확히 일치해야한다!
앱 단위 config에서 초기화를 해줘야한다.
class ApplicationClass : Application() {
override fun onCreate(){
super.onCreate()
Log.d("TEST++", "ApplicationClass")
FirebaseApp.initializeApp(this)
UserRepository.initialize(this)
}
}
1. 사용자 기준으로 데이터 구성하기
{
"users": {
"user123": {
"diaries": {
"diaryId1": {
"contentId": 1,
"title": "First Diary",
"content": "Content of the first diary",
"timestamp": "2024-06-25",
"photoUrl": "https://example.com/photo1.jpg"
},
"diaryId2": {
"contentId": 2,
"title": "Second Diary",
"content": "Content of the second diary",
"timestamp": "2024-06-26",
"photoUrl": "https://example.com/photo2.jpg"
}
}
}
}
}
{
"diaries": {
"diaryId1": {
"userId": "user123",
"contentId": 1,
"title": "First Diary",
"content": "Content of the first diary",
"timestamp": "2024-06-25",
"photoUrl": "https://example.com/photo1.jpg"
},
"diaryId2": {
"userId": "user123",
"contentId": 2,
"title": "Second Diary",
"content": "Content of the second diary",
"timestamp": "2024-06-26",
"photoUrl": "https://example.com/photo2.jpg"
},
}
결론
=> 어차피 난 사용자별로만 보여주면 되니 user별로 하위에 diaries들을 두는 것으로 결정했다! 첨엔 2번으로 했는데 생각해보니 유저별로 두는 것이 더 편할 것 같았다.