【发布时间】:2019-01-16 15:58:56
【问题描述】:
如何将所有Electrician 数据检索到ListView 中?
【问题讨论】:
标签: java android firebase firebase-realtime-database
如何将所有Electrician 数据检索到ListView 中?
【问题讨论】:
标签: java android firebase firebase-realtime-database
假设您的电工对象有一个名为 Electrician 的模型类,要获取电工对象列表,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference electricianRef = rootRef.child("Employee").child("Electrician");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Electrician> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Electrician electrician = ds.getValue(Electrician.class);
list.add(electrician);
Log.d("TAG", electrician.getLname());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
};
electricianRef.addListenerForSingleValueEvent(valueEventListener);
您可以更简单地实现这一点,例如使用 String 类并获取电工姓名列表:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference electricianRef = rootRef.child("Employee").child("Electrician");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String lName = ds.child("Lname").getValue(String.class);
list.add(lName);
Log.d("TAG", lName);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
};
electricianRef.addListenerForSingleValueEvent(valueEventListener);
【讨论】:
String lName = ds.child("Lname").getValue(String.class);.
从 firebase 创建对象列表(电工),然后通过在自定义适配器中传递对象列表来创建列表视图。
【讨论】:
如果您想要一个列表视图,其中列表视图中的每个项目都包含某个电工的部分或全部数据,您首先需要节点“电工”的数据快照。还要创建一个名为“elecrician”的对象,它具有与 firebase 数据库中相同的数据字段。然后使用数据快照创建类似于Ryan Pierce 答案的“电工”对象数组。现在您已经有了一组电工及其数据,您可以在列表视图中显示您想要显示的数据。
此外,如果您想计算例如员工在那里工作了多长时间(在我看来更容易使用),那么使用时间(以毫秒为单位)而不是日期作为字符串可能更容易。此外,“JobTitle”字段可能是多余的,因为节点标题已经说明了职位,例如'电工'。
【讨论】: