2017-04-11 111 views
0

我正在使用Firebase工作在一個Android項目中,我想獲取有關酒吧的信息,我想我正確地獲取數據,但我在數據庫結構中有一些節點,例如該節點中的「營業時間」打開和關閉歡樂時光的小時,開始和結束時間。我檢索該節點在List<Object>這樣的:如何迭代列表<Object>或獲取列表元素?

這是我ValueEventListener

ValueEventListener valueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Get Post object and use the values to update the UI 
     long value = dataSnapshot.getChildrenCount(); 
     Log.d("Bar", "No. of children: " + value); 

     for (DataSnapshot districtSnapshot: dataSnapshot.getChildren()) { 
      String district = districtSnapshot.getKey(); 

      for (DataSnapshot barSnapshot: dataSnapshot.child(district).getChildren()) { 

       Bar bar = barSnapshot.getValue(Bar.class); 
       String name = bar.getName(); 
       String address = bar.getAddress(); 
       List<String> photos = bar.getPhotos(); 
       List<Object> hours = bar.getHours(); 
       double latitude = bar.getLatitude(); 
       double longitude = bar.getLongitude(); 

       barsList.add(new Bar(name, address, latitude, longitude, photos)); 

       Log.d("Bar", "Lat: " + latitude); 
       Log.d("Bar", "Long: " + longitude); 
       Log.d("Bar", "Photos: " + photos.toString()); 
       Log.d("Bar", "Hours String: " + hours.toString()); 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
    } 
}; 

mPostReference.addListenerForSingleValueEvent(valueEventListener); 

Log.d("Bar", "Hours String: " + hours.toString());我得到的陣列正確的信息,但我只是不知道如何將其轉換爲一種方法可以例如happyStart選擇:

時間字符串:[{happyStart = 17,happyEnd = 19,開放= 17,靠近= 2}, {happyStart = 17,happyEnd = 18,開= 16,close = 2}]

請幫幫我。提前致謝!

UPDATE,加入酒吧類:

@IgnoreExtraProperties 
public class Bar { 
    private String address; 
    private String name; 
    private double latitude; 
    private double longitude; 
    private List<Object> hours; 
    private List<Object> beers; 
    private List<String> photos; 

    public Bar() { } 

    public Bar(String name, String address, double latitude, double longitude, List<String> photos) { 
     this.name = name; 
     this.address = address; 
     this.photos = photos; 
    } 

    @Exclude 
    public Map<String, Object> toMap() { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("name", name); 
     result.put("address", address); 
     result.put("photos", photos); 
     result.put("hours", hours); 
     result.put("longitude", longitude); 
     result.put("latitude", latitude); 
     result.put("beers", beers); 

     return result; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public List<Object> getHours() { 
     return hours; 
    } 

    public List<Object> getBeers() { 
     return beers; 
    } 

    public List<String> getPhotos() { 
     return photos; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 
} 
+0

安置自己的'Bar'類 – Apoorv

+0

'私有列表小時喜歡的任何時間;'...你要在這裏建立一個'Hour'類? –

+0

我剛剛發佈了我的Bar類@Apoorv –

回答

3

嘗試使用

private List<Map<String, Integer>> hours; 

然後,這將是

int happyStart = beer.getHours().get(0).get("happyStart"); 

.get(0)被添加到獲得第一個出來的名單。

您也可以嘗試

for (Map<String, Integer> hours : beer.getHours()) { 
    Log.d("happyStart", "" + hours.get("happyStart")); 
} 

或者,你仍然需要繼續繪製你的火力地堡結構爲Java對象有Hour類。

+0

好,它的工作原理!,你知道如何在結構上更深入嗎?我的意思是我的「啤酒」字段有一個數字(就像小時),然後是「名稱,類型和價格「,其中價格是包含每個瓶子尺寸(300ml,500ml等)的歡樂時光和正常價格數據的另一個節點... –

+1

任何您已映射到對象的東西實際上都是TreeMap,但您也可以像對待Bar一樣定義自己的Java類 –

0

創建一個名爲Hours

public class Hours { 
    private String happyStart; 
    private String happyEnd; 
    private String open; 
    private String close; 
} 

添加所有的getter和setter像Bar類,然後用private List<hours> hours;替換private List<Object> hours;另一個類。

然後你可以檢索你從List對象