2017-04-11 109 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对象