我试图从firebase获取值。在这里,我无法获得"出勤率"节点
这是我的模特:
public class MemberInGroup {
private String name;
private HashMap<String, HashMap<String, Object>> attendance;
private String group;
public MemberInGroup() {
}
public MemberInGroup(String name, HashMap<String, HashMap<String, Object>> attendance, String group) {
this.name = name;
this.attendance = attendance;
this.group = group;
}
public String getName() {
return name;
}
public String getGroup() {
return group;
}
public HashMap<String, HashMap<String, Object>> getAttendance() {
return attendance;
}
以下是适配器中的populateView方法:
@Override
protected void populateView(View view, MemberInGroup member, int i) {
final String name = member.getName();
final String group = member.getGroup();
// Create views and assign values
final TextView nameTxtView = (TextView) view.findViewById(R.id.nameTxtView);
nameTxtView.setText(name);
HashMap<String, HashMap<String, Object>> attendance = member.getAttendance();
if(attendance != null) {
HashMap<String, Object> todayAttendance = attendance.get(Utility.getTodayName());
if(todayAttendance != null) {
String date = (String) todayAttendance.get("date");
}
}
我能够检索&#34;名称&#34;和&#34;组&#34;值,但不是&#34;出勤&#34;内的日哈希映射。 Utility.getTodayName给出正确的日期名称,但是&#34; date&#34;返回null。
以下是我查询数据库和设置适配器的方法:
final DatabaseReference ref = database.getReference();
Query query = ref.child("members")
.orderByChild("group")
.equalTo("group7");
// Set the adapter with groupMembersRef
MembersOfGroupAdapter mOfGroupAdapter = new MembersOfGroupAdapter(getActivity(), MemberInGroup.class,
R.layout.list_item_member_in_sport, query);
sportMembersListView.setAdapter(mOfGroupAdapter);
我试图查询特定群组中的所有成员。任何建议都表示赞赏。
答案 0 :(得分:1)
Utility.getTodayName给出正确的日期名称,但“date”返回null。
您在日期名称和日期值之间有一个中间键。你需要经历这一点。换句话说,这是在访问包含get()
键的内部对象之前必须date
的字符串值。
顺便说一句,如果您希望按顺序迭代任何值,则应该使用TreeMap
,而不是Hashmap
。
您可以在该地图的keySet上使用for循环,当前使用get("date")
循环遍历所有密钥,使用get(key).get("date")
。
关于NoSQL的事情是,有多种方法可以做你想要的,但也许你应该考虑重新构建数据,以便在同一级别的成员中添加一个出勤节点。没有理由将所有内容放在成员键下,有时需要复制信息才能在SQL中实现某种类型的JOIN。
我会假设一个类似于你拥有的模型
attendance
monday
member::1
tuesday
member::1
member::2
members
member::1
name
email
member::2
groups
group::7
members
member::4
那么,根据您想要的数据,您有两个更容易访问的查询路径。例如,所有成员,所有组,一周中某一天的与会者等。
根据我的建议,你必须对数据库进行多次查找。一旦获得所有成员,然后获得其他成员以获得出席和团体,然后筛选出给定成员。
您可能在适配器getView方法中执行此操作,您可以在其中访问成员。它应该是ref('attendance').child(day)
之类的东西,然后你需要检查那些孩子,我认为startAt(memberId).endAt(memberId)
得到一个成员密钥。如果那里返回了任何数据,那么你应该使用get(memberId).get('date')
的Hashmap。
要求是您不要为成员使用随机生成的密钥,因此需要object::<id>
表示法。