개발/Android

Firebase Firestore 요약

레란희 2018. 10. 11. 23:12

Firestore를 사용하게 되어 메모 겸 요약본을 작성한다.

문서가 꽤 잘되있어 처음 시작은 어렵지 않을듯.


** firestore 지원 DataType

https://firebase.google.com/docs/firestore/manage-data/data-types?authuser=0



** firestore 데이터 가져오기

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



** 시작하기 전에 권한이 없다고 나온다면..


권한에 들어가서 저 부분을 true로 바꾸면 된다. (저렇게 하면 읽기 쓰기 허용)








예를 들어 아래와 같은 데이터를 등록했다고 할 때..




database.document("notice/main").get().addOnCompleteListener(task -> {

    if(task.isSuccessful()){

        //성공

        DocumentSnapshot document = task.getResult();

        List list = (List) document.getData().get("list");

        for(int i=0;i<list.size();i++){

            Log.i("TEST", "data["+i+"] > " + list.get(i).toString());

            HashMap map = (HashMap) list.get(i);

            NoticeData data = new NoticeData();

            data.setTitle(map.get("title").toString());

            data.setContent(map.get("content").toString().replace("\\n", "\n"));

            data.setRegDate((Date) map.get("regdate"));

            Log.i("TEST", "["+i+"] > " + (list.get(i) instanceof HashMap) + " / " + (list.get(i).getClass().getName()) + " / " + list.get(i).toString());

        }

    }else{

         //실패

    }

};



한 줄씩 보자면..

** database.document("notice/main").get().addOnCompleteListener(task -> {

- Document를 가져올 것이라서 document(Colloction이름/Document이름).get()을 사용

- task 는 Task<DocumentSnapShot>이다.


** DocumentSnapshot document = task.getResult();

- 해당 문서 내부의 항목을 가져옴. (HashMap<String, Object> 형태


** List list = (List) document.getData().get("list");


- list라는 이름으로 등록된 필드를 가져옴



** HashMap map = (HashMap) list.get(i);


- Object 형식으로 저장한 데이터를 가져올 때는 Map을 사용함.


** data.setContent(map.get("content").toString().replace("\\n", "\n"));

- 개행문자가 그대로 입력되기 때문에 개행문자를 다시 한 번 변환해준다. (\\으로 입력해야 "\" 문자로 인식됨)


** data.setRegDate((Date) map.get("regdate"));

- 서버에 등록된 Timestamp를 바로 Date로 변환하기 위해서는 아래와 같은 코드를 사전에 입력해두어야 한다.

        database = FirebaseFirestore.getInstance();

        FirebaseFirestoreSettings.Builder settings = new FirebaseFirestoreSettings.Builder();

        settings.setTimestampsInSnapshotsEnabled(true);

        database.setFirestoreSettings(settings.build());

        database.document(....).get()....




** 

문서 내부에 list가 아니라 특정 오브젝트의 형태로 만들어져있다면 

toObject 메소드를 사용하여 손쉽게 Custom Object로 변환할 수 있다.