Android 如何检索数据?Firebase 3.0数据库

Android 如何检索数据?Firebase 3.0数据库,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,例如,如何从“Compressor_1”中检索所有child Firebase数据库: "CompresoresEstandar" : { "Compresor_1" : { "Marca" : "SANDEN", "Modelo" : "505/5H09", "Canales" : "PV5",

例如,如何从“Compressor_1”中检索所有child

Firebase数据库:

"CompresoresEstandar" : {
    "Compresor_1" : {
    "Marca" : "SANDEN",
    "Modelo" : "505/5H09",
    "Canales" : "PV5",
    "Dimametro-MM" : "120",
    "Voltios" : "12",
    "Conexion" : "V-O",
    },
    "Compresor_2" : {
    "Marca" : "SANDEN",
    "Modelo" : "505/5H09",
    "Canales" : "PV5",
    "Dimametro-MM" : "120",
    "Voltios" : "12",
    "Conexion" : "V-O",
    },
从网络上尝试了此示例,但它显示了以下错误:

com.google.firebase.database.DatabaseException: Class java.util.Map has generic type parameters, please use GenericTypeIndicator instead
更新1

已经尝试了以下内容:

GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {};
Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator );
工作代码

@Override
public void onStart(){
    super.onStart();
    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference compresoresRef = database.getReference("CompresoresEstandar");
    compresoresRef.orderByChild("Ref").addChildEventListener(new ChildEventListener() {

    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        dataSnapshot.getChildren();
        CompresorModel coe = dataSnapshot.getValue(CompresorModel.class);
        String modelo = coe.getModelo();
        String marca = coe.getMarca();
        String canales = coe.getCanales();
        textData1.setText(modelo);
        textData2.setText(marca);
        textData3.setText(canales);
    }

如果每个节点都包含与我从JSON文件中看到的相同的子节点,则可以为compressores对象创建一个模型类

在这里:

压缩标准单元类

public class CompresoresEstandarUnit {

    String Marca;
    String Modelo;
    String Canales;
    String Dimametro_MM; //Recommend you to change Firebase Node name to Dimametro_MM
    String Voltios;
    String Conextion;

    public CompresoresEstandarUnit() {
        //Firebase Empty Constructor
    }

    public String getCanales() {
        return Canales;
    }

    public void setCanales(String canales) {
        Canales = canales;
    }

    public String getConextion() {
        return Conextion;
    }

    public void setConextion(String conextion) {
        Conextion = conextion;
    }

    public String getDimametro_MM() {
        return Dimametro_MM;
    }

    public void setDimametro_MM(String dimametro_MM) {
        Dimametro_MM = dimametro_MM;
    }

    public String getMarca() {
        return Marca;
    }

    public void setMarca(String marca) {
        Marca = marca;
    }

    public String getModelo() {
        return Modelo;
    }

    public void setModelo(String modelo) {
        Modelo = modelo;
    }

    public String getVoltios() {
        return Voltios;
    }

    public void setVoltios(String voltios) {
        Voltios = voltios;
    }
}
然后在你的听众中:

@Override
public void onStart(){
    super.onStart();
    DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
    mRootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
         dataSnapshot.getChildren();
            CompresoresEstandarUnit coe = dataSnapshot.getValue(CompresoresEstandarUnit.class);


            String modelo = coe.getModelo();
            mConditionTextView.setText(modelo);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });*/

这种面向对象的方法将为结构提供灵活性。

可能重复以前尝试过的解决方案,但没有解决它。显示您使用
GenericTypeIndicator尝试过的内容。
。欢迎使用任何示例,谢谢。出现错误,但大写似乎没有问题。我抄了你的并修改了它。致命异常com.google.firebase.database.DatabaseException:发现两个getter或字段的属性区分大小写冲突:canalesPlease请参阅:@Frank已在此处进行了深入解释。此外,您是否更改了Dimametro MM节点?请看,就序列化实践而言,使用与节点名称完全相同的变量是最好的方法。由于Java不支持
-
,我建议您也使用可以序列化为变量的内容更改节点密钥。出现此错误(类似于更新1):无法将Java.lang.String类型的对象转换为compressorModel类型。请更新一次代码好吗?我怀疑你读的是子值而不是compressor的节点。。。
public class CompresoresEstandarUnit {

    String Marca;
    String Modelo;
    String Canales;
    String Dimametro_MM; //Recommend you to change Firebase Node name to Dimametro_MM
    String Voltios;
    String Conextion;

    public CompresoresEstandarUnit() {
        //Firebase Empty Constructor
    }

    public String getCanales() {
        return Canales;
    }

    public void setCanales(String canales) {
        Canales = canales;
    }

    public String getConextion() {
        return Conextion;
    }

    public void setConextion(String conextion) {
        Conextion = conextion;
    }

    public String getDimametro_MM() {
        return Dimametro_MM;
    }

    public void setDimametro_MM(String dimametro_MM) {
        Dimametro_MM = dimametro_MM;
    }

    public String getMarca() {
        return Marca;
    }

    public void setMarca(String marca) {
        Marca = marca;
    }

    public String getModelo() {
        return Modelo;
    }

    public void setModelo(String modelo) {
        Modelo = modelo;
    }

    public String getVoltios() {
        return Voltios;
    }

    public void setVoltios(String voltios) {
        Voltios = voltios;
    }
}
@Override
public void onStart(){
    super.onStart();
    DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
    mRootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
         dataSnapshot.getChildren();
            CompresoresEstandarUnit coe = dataSnapshot.getValue(CompresoresEstandarUnit.class);


            String modelo = coe.getModelo();
            mConditionTextView.setText(modelo);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });*/