我正在用这些数据创建一个文档:
{
"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
财产是HashMaps
的HashMap
。因此,您应该迭代两次以获得所需的数据。