2017-01-14 1 views
0

J'ai utilisé FirebaseRecyclerAdapter pour obtenir tous les enfants de "Pro" en utilisant une classe Model nommée "Spacecraft" et maintenant je veux récupérer tous les candidats dans un enfant de Pro comme "1"Pas de setter/field pour found Android Firebase

J'ai créé un public static « candidat » dans « Spacecraft » et moi les setters et getters mais toujours la même erreur

Ceci est ma base de données:

Database

c'est le modèle de classe

public class Spacecraft{ 
    private String name; 
    private String desc; 
    private String last; 
    private candidat candidat; 

    public Spacecraft.candidat getCandidat() { 
     return candidat; 
    } 

    public void setCandidat(Spacecraft.candidat candidat) { 
     this.candidat = candidat; 
    } 

    public Spacecraft() { 
    } 
    public String getName() { 

     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 

    public String getLast() { 
     return last; 
    } 

    public void setLast(String last) { 
     this.last = last; 
    } 
    public static class candidat{ 

     private String info; 
     private String namecandid; 
     public candidat(){} 
     public String getInfo() { 
      return info; 
     } 

     public void setInfo(String info) { 
      this.info = info; 
     } 

     public String getNamecandid() { 
      return namecandid; 
     } 

     public void setNamecandid(String namecandid) { 
      this.namecandid = namecandid; 
     } 
    } 
} 

Ceci est mon code pour FirebaseRecyclerAdapter

@Override 
    protected void onStart() { 
     super.onStart(); 
     FirebaseRecyclerAdapter<Spacecraft, candidatviewholder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Spacecraft, candidatviewholder>(
       Spacecraft.class, 
       R.layout.candidat, 
       candidatviewholder.class, 
       query){ 
         @Override 
         protected void populateViewHolder(candidatviewholder viewHolder, Spacecraft model, int position) { 
          viewHolder.setName1(model.getCandidat().getNamecandid()); 
          viewHolder.setInfo1(model.getCandidat().getInfo()); 
         } 
        }; 
     rv.setAdapter(firebaseRecyclerAdapter); 
    } 

L'erreur:

No setter/field for key1 found on class com.example.ilyas.evotingapplication.Spacecraft$candidat

+0

static static ne peut pas avoir le constructeur – uguboz

+0

je supprime le constructeur mais toujours la même erreur:/@uguboz –

+0

ne supprime pas le constructeur. supprime les static de la classe candidat. et dans Spacecraft, définissez le candidat en appelant new candidat(). – uguboz

Répondre

1

Je pense qu'il est juste que vos modèles de données sur Firebase et en Java diffèrent. Dans votre classe Java, la classe Spacecraft a un champ candidat de type Candidat. Mais, dans la base de données, le champ candidat est en réalité un objet imbriqué (carte), contenant une clé Key1, dont la valeur est une structure Candidat.

Ainsi, selon ce que vous vouliez réaliser:

  • si vous voulait que chaque vaisseau spatial pour avoir exactement un candidat: enregistrer l'objet de base de données correctement, donc {info: "info 1", namecandid: "name 1"} est enregistré directement sous candidat champ, non un niveau plus profond, de sorte que le champ a le type Candidat dans le code.
  • si vous vouliez que chaque vaisseau spatial ait quelques candidats: au lieu du champ private Candidat candidat, il devrait être tapé Map<String, Candidat>, parce que c'est le type qu'il contient dans la capture d'écran de votre base de données.
+0

Hey quezak, merci d'avoir fait un anecdote!c'est le deuxième cas; je veux que chaque spacecrft ait peu de candidats et les peuple dans un FirebaseRecycler; J'ai ajouté cela à Spacecraft "carte privée candidat;" (avec getters, setters) Pouvez-vous me dire comment puis-je récupérer des données de cette carte? –

+0

@ilyasshabi itérer dessus comme une carte Java normale :) voir [cette réponse] (http://stackoverflow.com/a/1066607/1815209) pour une explication simple. – quezak

+0

je l'itérer dans cette fonction populateViewHolder? –

2

J'ai eu cette erreur mais les solutions ci-dessus ne l'ont pas corrigé. Espérons que cette solution de rechange aidera les autres. Si cette erreur se produit pour presque toutes les variables, il est possible que Proguard soit activé et que les méthodes getter et setter non utilisées soient supprimées. Pour corriger cela, ajoutez une ligne similaire à votre fichier proguard-rules.pro:

-keep class com.example.yourapp.ObjectClass 

où ObjectClass est le nom de votre classe d'objet java qui est stocké à Firebase.