2016-07-19 2 views
1

Wie kann ich beispielsweise alle Childs von "compresor_1" abrufen?Wie Sie die Daten abrufen? Firebase 3.0-Datenbank

Firebase Datenbank:

"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", 
    }, 

dieses Beispiel aus dem Netz versucht, aber es zeigt mir diesen Fehler:

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

UPDATE 1

bereits versucht, diese:

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

Und:

Map<String,String> map = dataSnapshot.getValue(Map.class); 

mit dem gleichen Fehler.

UPDATE 3

Datasnapshot diese Informationen enthält, wie kann ich "jedes Objekt teilen?" .get ("modelo") ruft das erste Element mit diesem Schlüssel ab.

DataSnapshot { key = CompresoresEstandar, value = {Compresor_2={Letras Culata=, Voltios=12, Marca=SANDEN, Conexion=V-R, Canales=2A, RefACR=130002, Modelo=505/5H09, Dimametro-MM=125}, Compresor_3={Letras Culata=, Voltios=12, Marca=SANDEN, Conexion=V-C, Canales=2A, RefACR=130003, Modelo=505/5H09, Dimametro-MM=125}, Compresor_1={Letras Culata=, Voltios=12, Marca=SANDEN, Conexion=V-O, Canales=PV5, RefACR=130001, Modelo=505/5H09, Dimametro-MM=120}} } 

ARBEITS CODE

@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); 
    } 
+0

Mögliche Duplikate von [Klasse java.util.Map hat generische Typparameter, bitte verwenden Sie stattdessen GenericTypeIndicator] (http://stackoverflow.com/questions/37688031/class-java-util-map-has-generic-type- Parameter-Please-Use-Generictypindicator) –

+2

Versuchte diese Lösungen vor aber löste es nicht. – Xaloju

+0

Zeigen Sie, was Sie mit 'GenericTypeIndicator' probiert haben. –

Antwort

1

Sie können eine Modellklasse Ihrer Compresores Objekt erstellen, wenn jeder Knoten gleichen Kinder enthält, wie ich aus dem JSON-Datei sehen können.

hier:

CompresoresEstandarUnit.class

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; 
    } 
} 

Und dann in Ihrem Hörer:

@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) { 

     } 
    });*/ 

Diese objektorientierte Ansatz Flexibilität der Struktur bieten.

+0

Es ist ein Fehler aufgetreten, aber der Großbuchstabe scheint in Ordnung zu sein. Ich habe deine kopiert und überarbeitet. FATALE AUSNAHME com.google.firebase.database.DatabaseException: Zwei Getter oder Felder mit widersprüchlicher Groß-/Kleinschreibung für die Eigenschaft gefunden: canales – Xaloju

+0

Bitte beachten Sie: [DatabaseException: Zwei Getter oder Felder mit widersprüchlicher Groß-/Kleinschreibung gefunden] (http: // stackoverflow.com/questions/37801036/databaseexception-found-two-getters-or-fields-with-conflicting-case-sensitivity) @Frank hat hier ausführlich erklärt. –

+0

Haben Sie auch *** Dimametro-MM *** Knoten geändert? Soweit es die Praxis der Serialisierung betrifft, ist es am besten, die Variablen mit genau demselben Namen des Knotens zu haben.Da Java '' '' '' nicht unterstützt, würde ich Ihnen empfehlen, Ihren Knotenschlüssel mit etwas zu ändern, das auch als Variable serialisiert werden kann. –

Verwandte Themen