我是Firebase的新手,我不明白为什么我无法在tMAX和相同的变量中获取数据(tMAX始终返回0.0并等于0)。我尝试了很多发现的事情,但是在调试时,所有这些事情我都得到了相同的结果。 我究竟做错了什么? 这是从数据库读取的正确方法吗?我错过了什么吗?
Strings.java-这是我阅读的地方
public class Settings {
double tMAX;
int NumNodes;
int LastNode;
int Source;
int same;
DatabaseReference mFirebaseDatabase;
FirebaseDatabase mFirebaseInstance;
String userID;
public Settings() {
mFirebaseInstance=FirebaseDatabase.getInstance();
userID= FirebaseAuth.getInstance().getCurrentUser().getUid();
mFirebaseDatabase=mFirebaseInstance.getReference().child("user").child(userID).child("1");
mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
for(DataSnapshot snapshot1: snapshot.getChildren()){
if(snapshot != null){
User user = snapshot1.getValue(User.class);
if(user != null){
tMAX = user.getDuration();
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Settings", "loadPost:onCancelled", databaseError.toException());
}
});
NumNodes=31;
mFirebaseDatabase.child("2").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
for(DataSnapshot snapshot1: snapshot.getChildren()){
if(snapshot != null){
User2 user = snapshot1.getValue(User2.class);
if(user != null){
same=user.getSourceDestination().get(0);
if(same==1){
NumNodes+=1;
Source=0;
LastNode=0;
}
else{
NumNodes+=2;
Source=0;
LastNode=32;
}
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Settings", "loadPost:onCancelled", databaseError.toException());
}
});
}
}
这就是我的数据库的样子 https://imgur.com/a/5HTHsfT
答案 0 :(得分:0)
更改以下内容:
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
for(DataSnapshot snapshot1: snapshot.getChildren()){
if(snapshot != null){
User user = snapshot1.getValue(User.class);
if(user != null){
tMAX = user.getDuration();
}
}
}
对此:
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
if(snapshot.exists()){
User user = snapshot.getValue(User.class);
tMAX = user.getDuration();
}
}
首先,您需要使用exists()
方法来检查该位置是否有数据。其次,由于使用的是POJO类,因此不应在快照内部进行迭代。进行迭代时,您正在检索类型为String
的数据,而不是类型为User
的数据。