2017-01-14 53 views
0

我用FirebaseRecyclerAdapter使用名爲「Spacecraft」的模型類獲取「Pro」的所有孩子,現在我想檢索所有候選人到Pro的孩子,如「1」沒有找到Android的setter /字段Firebase

我創建了一個公共靜態「candidat」到「航天器」和我使用的getter和setter方法,但仍是同樣的錯誤

這是我的數據庫:

Database

這是模型類

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

這是我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); 
    } 

錯誤代碼:

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

+0

靜態類不能有構造函數 – uguboz

+0

我刪除了構造函數,但仍然是相同的錯誤:/ @uguboz –

+0

不刪除構造函數。從candidat類刪除靜態。並在航天器通過呼籲新的候選人()設置候選人。 – uguboz

回答

1

我認爲這只是對火力地堡和Java中的數據模型不同。

在你的java類中,Spacecraft類有candidat字段類型Candidat。但是,在數據庫中,candidat字段實際上是一個嵌套對象(地圖),其中包含一個鍵Key1,該值爲Candidat結構。

所以,這取決於你想要達到的:

  • ,如果你想在每一飛船有一個確切的candidat:保存數據庫對象得當,所以{info: "info 1", namecandid: "name 1"}直接下candidat場保存,不更深一層,所以該字段的代碼中有Candidat
  • 如果你想讓每個航天器有一些候選人:而不是private Candidat candidat字段,應該鍵入Map<String, Candidat>,因爲這是它在你的數據庫截圖中的類型。
+0

嘿quezak,謝謝你的支持!這是第二種情況;我希望每個spacecrft有幾個候選人並將其填充到FirebaseRecycler中; 我將此添加到航天器「私人地圖<字符串,candidat> candidat;」(與getters,setters) 你能告訴我如何檢索此地圖的數據? –

+0

@ilyasshabi迭代它像一個普通的Java地圖:)看到[這個答案](http://stackoverflow.com/a/1066607/1815209)一個簡單的解釋。 – quezak

+0

我會迭代它到這個函數populateViewHolder? –

2

我有這個錯誤,但上述解決方案沒有解決它。希望這種替代解決方案能夠幫助其他人。如果幾乎每個變量都出現這種錯誤,那麼您可能會啓用Proguard並刪除未使用的getter和setter方法。爲了解決這個問題,添加類似的一行到你的proguard-rules.pro文件:

-keep class com.example.yourapp.ObjectClass 

其中對象類是存儲到火力地堡Java對象類的名稱。