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());
}