【发布时间】:2021-05-25 05:13:53
【问题描述】:
I am trying to read from relatime database the following object
从 Firebase 导出的 JSON 是这样的:
"categorias" : {
"Telas de Hogar" : {
"descripcion" : "",
"estado" : "invisible",
"nombre" : "Telas de Hogar",
"paginas" : {
"Loneta" : {
"descripcion" : "",
"estado" : "invisible",
"nombre" : "Loneta"
}
}
}
}
当前班级:
package com.example.tejidospulido_app.Model.Classes;
import java.util.Map;
public class Category {
private String nombre;
private String descripcion;
private String estado;
private Map<String, String> productos;
private Map<String, Page> paginas;
public Category(){}
public Category(String name) {
this.nombre = "";
this.descripcion = "";
this.estado = "";
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public Map<String, String> getProductos() {
return this.productos;
}
public void setProductos(Map<String, String> productos) {
this.productos = productos;
}
public Map<String, Page> getPaginas() {
return this.paginas;
}
public void setPaginas(Map<String, Page> pages) {
this.paginas = paginas;
}
@Override
public String toString() {
return nombre;
}
}
我已经设法读取了对象及其属性,但是当我想读取 paginas 和 productos 时,它在 paginas 中返回 null strong> 和 productos 中的 thi 错误:
com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertString(CustomClassMapper.java:426)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:217)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToType(CustomClassMapper.java:179)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToParameterizedType(CustomClassMapper.java:265)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToType(CustomClassMapper.java:177)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$100(CustomClassMapper.java:48)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:593)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:563)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:433)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.example.tejidospulido_app.Vista.MenuFragment$2.onDataChange(MenuFragment.java:95)
at com.google.firebase.database.Query$1.onDataChange(Query.java:189)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
我已经从不同的来源搜索和阅读,根据我的理解,我应该使用地图,但事实是,我不知道该怎么做......
这是读取的代码,如果我调试它,后面是调试结果的图像。
FirebaseDatabase.getInstance().getReference().child("categorias").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Category c = snapshot.getValue(Category.class);
list.add(c);
}
AdapterCategories adapter = new AdapterCategories(list);
recycleView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
【问题讨论】:
-
Page类是什么样的? -
另外:请研究how to create a minimal, complete, verifiable example,因为我怀疑
descripcion、estado和nombre属性是否需要重现此问题。
标签: java android firebase class firebase-realtime-database