我正在使用Firebase for Android制作一个涉及组的应用程序,我在firebase中有一个使用push方法推送的项目列表,如下所示:
-Groups Joined:
~Unique Key: Group 1 Name
~Unique Key: Group 2 Name我试图在我的android代码中以Java列表的形式检索这个列表。我需要能够按索引访问Groups Joined节点中的信息,而不是使用唯一键,我正在使用此代码。
Query groupsJoined = myUserRef.child("Groups Joined").orderByKey();
groupsJoined.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
// do some stuff once
groupNames = (ArrayList<String>) snapshot.getValue();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});代码崩溃是因为snapshot.getValue()返回一个映射类型的对象。我没有办法访问地图的元素,因为我没有在android设备上存储这些唯一的键,我也不想这样做。如何才能在不使用唯一键的情况下,将数据快照作为可以遍历的内容返回,并从中获取组名?
发布于 2015-01-07 07:10:30
将Map转换为List非常简单。
尝试以下代码:
myUserRef.child("Groups Joined").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
// do some stuff once
Map groupNames = snapshot.getValue();
List groupNamesList = new ArrayList(groupNames.values());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});如果snapshot.getValue()的默认行为不能解决这个问题,您还可以使用pass in a Java class,客户端将尝试使用Jackson将其反编译到该类中。
https://stackoverflow.com/questions/27761336
复制相似问题