Firebase Firestore 요약
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로 변환할 수 있다.