중고거래 앱 만들기 (3) - 프래그먼트에서 FireBase 연결하기,실시간 데이터베이스 활용
2022. 12. 31. 21:45ㆍAndroid
- build.gradle 모듈 추가
- 다음은 안드로이드스튜디오에서 상단 Tools/Firebase 이렇게해서 추가하는방법도잇다.
implementation 'com.google.firebase:firebase-storage-ktx:20.1.0'
implementation platform('com.google.firebase:firebase-bom:31.1.1')
implementation 'com.google.firebase:firebase-auth-ktx:21.1.0'
implementation 'com.google.firebase:firebase-database-ktx:20.1.0'
- 홈프래그먼트
//파이어베이스 연동하기
private val auth: FirebaseAuth by lazy {
Firebase.auth
}
먼저 파이어베이스 auth를 선언 및 지연 초기화를 해줍니다.
지연초기화를 해주면 실제 사용이 되는 시점에 초기화를 시켜줍니다.
- 파이어베이스 객체자체를 넘겨주고 받는다는 가정을 사용했다.
private val articleList = mutableListOf<ArticleModel>()
private val listener = object : ChildEventListener {
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
//DB에 article 이 추가될때마다 동작하는 리스너
//article 자체를 객체를 통해서 주고받음
val articleModel = snapshot.getValue(ArticleModel::class.java)
//null시 반환
articleModel ?: return
articleList.add(articleModel)
articleAdapter.submitList(articleList)
}
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {
}
override fun onChildRemoved(snapshot: DataSnapshot) {
}
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {
}
override fun onCancelled(error: DatabaseError) {
}
- 대신 모델에는 컨스트럭트를 통해 기본 생성자를 만들어줘야만 연결이가능하다.
package com.example.secondhandtrade.home
import android.icu.text.CaseMap.Title
import android.net.Uri
data class ArticleModel (
val sellerId: String,
val title: String,
val createdAt : Long,
val price: String,
val imageUri: String
) {
constructor() : this("", "",0,"","")
}
- 파이어베이스 데이터베이스 읽기 쓰기
- 우선 저장은 파이어베이스 실시간 데이터베이스 에 앱이 직접 저장을 한다기보다는 인텐트와 유사하게
- 데이터베이스 래퍼런스를 매개체 삼아 저장하고 읽어오는 방식입니다.
//파이어베이스 연동하기
private val auth: FirebaseAuth by lazy {
Firebase.auth
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val fragmentHomeBinding = FragmentHomeBinding.bind(view)
binding = fragmentHomeBinding
articleDB = Firebase.database.reference.child(DB_ARTICLES)
articleAdapter = ArticleAdapter()
fragmentHomeBinding.articleRecyclerView.layoutManager = LinearLayoutManager(context)
fragmentHomeBinding.articleRecyclerView.adapter = articleAdapter
articleDB.addChildEventListener(listener)
- 프래그먼트 생명주기 활용
- 생명주기를 활용하여 매뉴가변경되었다가 다시 돌아올 경우 다시 그려주도록 노티파이를 적용
- 그리고 DeStroyview시 이벤트 리스너를 제거해주고 다시 생성될때 새로 할당되도록 해줍니다.
@SuppressLint("NotifyDataSetChanged")
override fun onResume() {
super.onResume()
//view를 다시 그림.
articleAdapter.notifyDataSetChanged()
}
override fun onDestroyView() {
super.onDestroyView()
articleDB.removeEventListener(listener)
}
- 실시간 데이터베이스
- 애뮬레이터 실행화면
'Android' 카테고리의 다른 글
중고 거래 앱 만들기(5) - 파이어베이스 스토리지 이용, 이미지 업로드하기,프로그래스바 이용하기 (0) | 2023.01.03 |
---|---|
중고거래 앱 만들기(4) - 물품 등록 페이지 구현하기, 파일 권한 부여하기, 인텐트로 액티비티간 데이터전달하기. (0) | 2023.01.02 |
중고거래앱만들기(2) - 리사이클러 뷰 ,홈 화면 구성하기 (0) | 2022.12.31 |
중고 거래 앱 만들기 (1) - 프래그먼트 (액티비티처럼 동작하는 뷰) (0) | 2022.12.29 |
도서리뷰 앱 만들기(2) - 도서리뷰저장하기 (0) | 2022.12.23 |