2016-09-11 160 views
1

我試圖讓我的火力點樹的價值子列表從火力地堡與Android

enter image description here

我有一類get_categories

public class get_categories { 
    private String Name; 

    public get_categories(){ 

    } 

    public String getName(){ 
     return Name; 
    } 
} 

然後我聲明瞭火力

mRef = new Firebase("https://...../Users/Categories"); 

並嘗試使用OnChildEventListener檢索我的數據

mRef.addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

       Log.e("Count " ,""+dataSnapshot.getChildrenCount()); 
       //Log.e("VALUES " ,""+dataSnapshot.child("Details").getValue()); 
       get_categories getCatName = dataSnapshot.child("Details").getValue(get_categories.class); 
       Log.e("NAME " ,""+getCatName.getName()); 
      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 

但我得到了由導致錯誤

:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:無法識別的 「名稱」 字段(類com.app.pierre.myapp.get_categories) ,未標記爲可忽略的(0個已知屬性:])[Source:[email protected];行:1,列:10](通過參考鏈:com.app.pierre.myapp.get_categories [「Name」])

我在做什麼錯?

我用過這種情況下作爲參考: https://www.firebase.com/docs/android/guide/retrieving-data.html

回答

1

那麼首先改變你的模式就是這樣,

public class GetCategories { 
    private String Name; 

    public GetCategories(){ 

    } 

    public GetCategories(String name){ 
    this.Name = name; 

    } 

    public String getName(){ 
     return Name; 
    } 
} 

,並使用Model類構造函數將數據推..

GetCategories model = new GetCategories("yourValues"); 

mReference.child("Details").push().setValue(model); 

和現在你可以像這樣得到它..

mRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) { 

       GetCategories newPost = eventSnapshot.getValue(GetCategories.class); 

       Log.e("NAME " ,""+ newPost.getName()); 

      } 

     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
+0

我試過你的解決方案,事情是我不需要推送數據,因爲我已經獲得了數據,但即使我用你的方法來設置我的數據(與模型)。當我打電話給監聽者時,我收到一條錯誤消息。另外我的數據是Categories/push()/ Details/Name = value,因爲在這個例子中,你給了我Categories/Details/push()/ Name = value。在我的情況下,有沒有其他選擇可以在不知道Details的父級的情況下訪問Details的子項,因爲它是使用push()方法自動生成的。在此先感謝 – Pierre

+0

嘗試檢索數據,正如我在答案中所建議的那樣,只是在推動時推送。 –

+0

因爲我知道你只能得到你的數據,因爲我建議因爲我面臨同樣的問題,並得到這樣的數據 –

1

JSON屬性的名稱以大寫字母開頭。但是通過JavaBean屬性的規則,getName()對應於名爲name(小寫n)的屬性。所以這兩者不匹配。得到這個工作

一種方法是不使用二傳手,而是使用公共領域:

public class get_categories { 
    public String Name; 
} 

有了這個,你要繞過JavaBean的邏輯,並得到一個直接映射。

+0

感謝您的提示弗蘭克:) – Pierre