从 Firebase Firestore 获取部分文档到对象中



我正在用这些数据创建一个文档:

{
"fields":{
"meta":{
"mapValue":{
"fields":{
"semana":{
"stringValue":"Semana XX"
},
"fecha":{
"stringValue":"20191209"
},
"titulo":{
"stringValue":"Lunes II de Adviento"
},
"mensaje":{
"stringValue":""
},
"tiempo":{
"integerValue":1
}
}
}
},
"lh":{
"mapValue":{
"fields":{
"0":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/0/0108022"
},"1":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/1/0108022"
},"2":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/2/0100022"
},"3":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/3/0100022"
},"4":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/4/0100022"
},"5":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/5/0100022"
},"6":{
"referenceValue":"projects/miproject/databases/(default)/documents/es/v1/liturgia/lh/6/0100022"
}
}
}
}
}
}

创建文档没有问题。

现在,在 Android 中,我需要填充两种类型的对象:

一个。使用键meta我需要填充一个类型MetaLiturgia的对象,并且

二.我采用其中一个引用来填充另一个对象。

我的问题是,我无法填充MetaLiturgia对象。

法典

DocumentReference calRef = db.collection(CALENDAR_PATH).document(fechaYY).collection(fechaMM).document(fechaDD);
calRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot calSnapshot,
@Nullable FirebaseFirestoreException e) {
if (calSnapshot != null && calSnapshot.exists()) {
Log.d(TAG,calSnapshot.toString());
Log.d("meta",calSnapshot.get("meta").toString());
/* (a) Error here, line 120 is below line*/
mMeta = (MetaLiturgia) calSnapshot.getData();
DocumentReference dataRef=calSnapshot.getDocumentReference("lh.1");
if (e != null || dataRef==null) {
launchVolley();
return;
}
dataRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot dataSnapshot) {
/*(b) No problem here*/
mBreviario = dataSnapshot.toObject(Breviario.class);
showData();
}
});
} else {
launchVolley();
}
}
});

我可以在日志中看到数据:

D/meta: {fecha=20191209, tiempo=1, semana=Semana XX, titulo=Lunes II de Adviento, mensaje=}

但是我遇到了这个错误:

2019-12-09 10:44:52.233 25121-25121/org.my.app E/Android运行时:致命 例外:主要 进程: org.my.app, PID: 25121 java.lang.ClassCastException: java.util.HashMap 不能强制转换为 org.my.app.model.MetaLiturgia at org.my.app.activities.OficioActivity$1.onEvent(OficioActivity.java:120(

我该怎么做?

您收到以下异常:

E/AndroidRuntime: fattal EXCEPTION: main Process: org.my.app, PID: 25121 java.lang.ClassCastException: java.util.HashMap 不能强制转换为 org.my.app.model.MetaLiturgia

使用以下代码行时:

mMeta = (MetaLiturgia) calSnapshot.getData();

因为当您调用calSnapshot.getData()时,返回的对象类型是HashMap而不是MetaLiturgia,并且在 Java 中无法将HashMap类型的对象转换为MetaLiturgia。由于该对象是HashMap,因此您应该相应地获取它。但也请注意,您的fields财产是HashMapsHashMap。因此,您应该迭代两次以获得所需的数据。

最新更新