해당 프로젝트

https://github.com/jaybon1/androidwork/tree/master/mvvmBindingFirestore1

 

jaybon1/androidwork

Contribute to jaybon1/androidwork development by creating an account on GitHub.

github.com

 

 

뷰모델 구조

 

 

데이터바인딩

 

앱 수준의 gradle에 데이터 바인딩을 허용하는 코드 추가

    // 데이터 바인딩
    dataBinding {
        enabled = true
    }

--

 

 

데이터를 받아올 모델 생성

--

 

 

데이터를 출력할 액티비티를 세팅한다

1. layout으로 바깥을 감싼다
2. 데이터 바인딩을 위해 연결한다
3. 원하는 뷰에 데이터를 연결한다

--

 

바인딩 타입 생성을 위해 리빌드를 해준다

--

 

 

데이터 바인딩을 사용할 클래스에서 데이터바인딩을 한 XML파일의 이름을 파스칼표기법으로 불러보면
아래와 같이 XML파일이름+Binding으로 타입을 불러올 수 있다

1. 데이터바인딩을 위해 변수생성
2. 바인딩 변수를 설정한다 (상위컨텍스트와 mxl레이아웃을 입력한다)
3. 연습용 데이터를 입력한다

--

 

 

테스트
정상적으로 출력된다

--

 

파이어스토어

 

참고

https://ondolroom.tistory.com/745

 

파이어스토어 문서

https://firebase.google.com/docs/firestore/quickstart?authuser=0#%EC%9E%90%EB%B0%94

 

Cloud Firestore 시작하기  |  Firebase

빠른 시작에서는 Cloud Firestore를 설정하고 데이터를 추가한 후 Firebase Console에서 방금 추가한 데이터를 확인하는 방법을 볼 수 있습니다. Cloud Firestore 데이터베이스 만들기 Firebase 프로젝트를 아직

firebase.google.com

 

매니페스트 파일에 인터넷 권한을 설정한다

--

 

 

프로젝트 수준의 gradle에 파이어 스토어 관련 클래스패스를 추가

        // 파이어스토어
        classpath 'com.google.gms:google-services:4.3.3'

--

 

 

앱 수준의 gradle에 파이어스터오 플러그인 추가

// 파이어스토어
apply plugin: 'com.google.gms.google-services'

--

 

 

 

FireStore에 SHA1입력시 사용

--

 

 

프로젝트의 app 안에 fireStore에서 제공한 파일 넣기

--

 

 

파이어스토어에 테스트용 필드 추가

--

 

 

!! 지금 부터 테스트해보는데 오류가 나거나 안된다면 에뮬레이터에서 앱을 지우고 다시 실행해보자

 

 

데이터바인딩 테스트용 코드 주석처리

--

 

 

메인 액티비티에 파이어스토어 레퍼런스 추가

 

onCreate에서 파이어스토어 객체 가져오기(연습)

 

파이어스토어에서 데이터 가져오기 (연습) - 주석처리하자

 

파이어스토어에 빨대꼽기(푸시방식)

https://firebase.google.com/docs/firestore/query-data/listen?authuser=0

 

Cloud Firestore로 실시간 업데이트 가져오기  |  Firebase

onSnapshot() 메서드로 문서를 수신 대기할 수 있습니다. 사용자가 제공하는 콜백이 최초로 호출될 때는 단일 문서의 현재 내용으로 문서 스냅샷이 즉시 생성됩니다. 그런 다음 내용이 변경될 때마�

firebase.google.com

 

앱이 처음 켜질때 1번 실행되고
데이터가 변경 되었을 때 한 번 더 실행되었다

--

 

 

모델에 빈생성자를 만들어주어야 빨대가 작동한다
(아래에 나오는 Name name = snapshot.toObject(Name.class);)

--

 

 

빨대가 꽂아졌다면 해당 이벤트 실행시 데이터바인딩을 연동시켜보자

--

 

 

테스트
실행해보면 fireStore에 저장된 데이터가 화면에 출력된다.
(fireStore에서 데이터를 변경하면 자동으로 변경된다.)

--

 

 

MVVM

 

앱 수준의 gradle에 디펜던시를 추가한다
(뷰모델 프로바이더를 호출하기 위함)

    // LifeCycle
    def lifecycle_version = "2.0.0"
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

 

xml에 글자 입력칸과 버튼을 하나 추가하자

--

 

 

메인액티비티에서 테스트용으로 만들었던 파이어베이스 객체를 주석처리하거나 삭제하자

--

 

 

리파지토리를 생성하고 파이어베이스 객체를 생성하는 코드를 입력

(initPush는 빨대꼽기 가동 함수이다. 아래에서 확인)

--

 

 

1. 라이브데이터를 리턴한다.
2. 이름을 변경하는 함수
3. 파이어스토어 빨대꼽기를 실행하는 함수 (push 가동)

--

 

 

뷰모델에 AndroidViewModel을 상속해주고
LiveData를 리턴해주는 구독()함수
이름을 변경해주는 이름바꾸기()함수를 추가해준다.

--

 

 

1. 첫째줄은 뷰모델 프로바이더 객체에서 뷰모델 인스턴스를 얻는 과정이다
뷰모델 인스턴스를 얻은후 뷰모델의 구독함수를 observe 해놓으면 LiveData의 데이터가 바뀔 때마다 onChanged함수가 실행된다.
2. 버튼을 누르면 뷰모델의 이름바꾸기 함수가 실행된다. (뷰모델엔 빨대가 꽂혀있으니 뷰모델의 이름만 바꿔도 옵저버가 발동하여 onChanged가 실행된다)

--

 

 

테스트

이 화면에서는 보이지 않지만, 다른 기기에서도 새로고침 없이 데이터가 바뀌어버린다

 

 

 

+ Recent posts