1

를 사용하는 경우 FireStore DocumentSnapshot 포함 DocumentReference를 역 직렬화하는 나는 다음과 같은 경우 FireStore 구조를 가지고 : 나는 코 틀린를 사용하지만 도시와 활동 유형으로 Any을 사용하여 직렬화하기 위해 관리어떻게 코 틀린

Firestore : User collection

합니다. 지금까지 내 데이터 클래스입니다 :

@IgnoreExtraProperties 
data class User (
     var firstName: String, 
     var lastName: String, 
     var displayName: String, 
     var birthday: Date, 
     var memberSince: Date, 
     var city: Any, 
     var activities: ArrayList<Any> 
) { 
    constructor():this("", "", "", Date(), Date(), Any(), ArrayList(0)) 
} 

그리고 여기에 내가 데이터 및 역 직렬화를 검색하는 방법입니다

DocumentReference userRef = mFirestoreDB.collection("user").document(mFirebaseUser.getUid()); 
userRef.addSnapshotListener(this, new EventListener<DocumentSnapshot>() { 
    @Override 
    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) { 
     if (documentSnapshot.exists()) { 
      final User user = documentSnapshot.toObject(User.class); 
      Log.i(TAG, user.toString()); 
     } else if(e != null) { 
      Log.e(TAG, "Error retrieving user data from Firestore", e); 
     } 
    } 
}); 
궁금

, 난 방법 난 강력하게 될 도시와 활동을 입력 할 수있다 DocumentReference해야합니까?

+0

을 사용하고있는 직렬화 라이브러리? 또는 Firebase 라이브러리가 직렬화를 수행합니까? –

+0

Firebase는 [toObject (java.lang.Class )] (https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/DocumentSnapshot.html#toObject (java.lang.Class))를 제공합니다. Class )) 메서드를 사용하여 deserialize합니다. deserialization을 수행하는 방법에 대한 몇 가지 코드를 추가했습니다. – Kalem

답변

0

나는 이것을하는 방법을 발견했다. lateinit 사이먼이 말한대로 :

일반적으로 속성은 생성자에서 를 초기화해야합니다 null 이외의 유형을 가진 것으로 선언 그래서 당신이해야 할 모든이 가장 최고 선언을 사용하는 것입니다. 그러나 꽤 자주 이것은 이 아닙니다. 예를 들어 속성은 종속성 삽입을 통해 초기화되거나 단위 테스트의 설치 방법으로 초기화 될 수 있습니다. 이 경우 생성자에서 null이 아닌 이니셜 라이저를 제공 할 수 없지만 클래스 본문 내부에서 속성을 참조 할 때 여전히 null 확인을 방지하려고합니다. 지금

내 데이터 클래스가 보인다는 같은 : 자기에

@IgnoreExtraProperties 
data class User2 (
     var firstName: String, 
     var lastName: String, 
     var displayName: String, 
     var birthday: Date, 
     var memberSince: Date, 
     var activities: ArrayList<DocumentReference> 
) { 
    lateinit var city: DocumentReference 
    constructor():this("", "", "", Date(), Date(), ArrayList(0)) 
} 

참고 : 정말 코 틀린에 대한 자세한 내용을 읽을 필요가 ... 당신이