Java 如何在android中将Firebase数组转换为集合

Java 如何在android中将Firebase数组转换为集合,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,} 但在线List userList=dataSnapshot.getValue(t)我得到的错误如下 致命异常:主 流程:com.chhota.firebasepractice,PID:8233 com.firebase.client.FirebaseException:无法跳转到类型 位于com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:210) 在 com.chhota.firebasepractice.MainActi

}

但在线
List userList=dataSnapshot.getValue(t)我得到的错误如下

致命异常:主 流程:com.chhota.firebasepractice,PID:8233 com.firebase.client.FirebaseException:无法跳转到类型 位于com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:210) 在 com.chhota.firebasepractice.MainActivity$1.onDataChange(MainActivity.java:40) 在 com.firebase.client.core.ValueEventRegistration.firevent(ValueEventRegistration.java:56) 位于com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 在 com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 位于android.os.Handler.handleCallback(Handler.java:733)


此JSON结构位于:

下次请将此添加到您的问题中,以便人们有足够的信息继续

由于您使用的是
ValueEventListener
,因此在
onDataChange()
回调中获得了整个JSON。这不是用户列表,而是将键(
-KCdZSoPFJ91-VKCA4pq
等)映射到用户的地图

因此:

GenericTypeIndicator t=新的GenericTypeIndicator(){};
Map userMap=dataSnapshot.getValue(t);
for(用户:userMap.values()){
System.out.println(user.getBirthYear());
}

您的JSON结构位于:

下次请将此添加到您的问题中,以便人们有足够的信息继续

由于您使用的是
ValueEventListener
,因此在
onDataChange()
回调中获得了整个JSON。这不是用户列表,而是将键(
-KCdZSoPFJ91-VKCA4pq
等)映射到用户的地图

因此:

GenericTypeIndicator t=新的GenericTypeIndicator(){};
Map userMap=dataSnapshot.getValue(t);
for(用户:userMap.values()){
System.out.println(user.getBirthYear());
}

这里有点奇怪,映射是无序集,但firebase查询支持“order by”子句,这意味着它们是有序的,这是如何工作的?如果要保持顺序,应该迭代子项:
for(DataSnapshot子项:DataSnapshot.getChildren()){…
。在这里也可以看到文档中的示例:奇怪的是,映射是无序集,但是firebase查询支持“order by”子句,这意味着它们是有序的,这怎么工作呢?如果要保持顺序,应该迭代子项:
for(DataSnapshot子项:DataSnapshot.getChildren()){…
。请参见此处文档中的示例:
firebase=new Firebase("https://flickering-inferno-4404.firebaseio.com/User/awosome");
    firebase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String temp=dataSnapshot.getValue().toString();
            GenericTypeIndicator<List<User>> t=new GenericTypeIndicator<List<User>>(){};
            List<User> userList=dataSnapshot.getValue(t);
            if (userList!=null){
                userList.get(0).getBirthYear();
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
public class User {
private int birthYear;
private String fullName;
public User() {}
public User(String fullName, int birthYear) {
    this.fullName = fullName;
    this.birthYear = birthYear;
}
public long getBirthYear() {
    return birthYear;
}
public String getFullName() {
    return fullName;
}
{
  "-KCdZSoPFJ91-VKCA4pq" : {
    "birthYear" : 1912,
    "fullName" : "Alan Turing"
  },
  "-KCdZSoeKEYo96gb2GBF" : {
    "birthYear" : 1913,
    "fullName" : "Mohmad"
  }
}
GenericTypeIndicator<Map<String, User>> t=new GenericTypeIndicator<Map<String, User>>(){};
Map<String, User> userMap=dataSnapshot.getValue(t);
for (User user: userMap.values()) {
    System.out.println(user.getBirthYear());
}