Chr*_*ebb 12 java android firebase firebase-realtime-database
无论我登录哪个用户,“points”变量始终返回为 0。相同的代码适用于不同的活动,我看不出有什么不同。当我将鼠标悬停在数据快照上时,它说可能会产生空指针异常,但它也在其他有效的活动中说明了这一点。我花了很长时间试图弄清楚这一点。谢谢。
databaseUsers =FirebaseDatabase.getInstance().getReference("Users");
final FirebaseAuth firebaseAuth;
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
databaseUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
points = dataSnapshot.child(user.getUid()).child("points").getValue(int.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//Getting Total Points from Firebase Database
databaseUsers.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
totalpoints = dataSnapshot.child(user.getUid()).child("totalpoints").getValue(int.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 21
我假设这是您正在谈论的行,并且points是某种原始类型,例如intor long:
Run Code Online (Sandbox Code Playgroud)points = dataSnapshot.child(user.getUid()).child("points").getValue(int.class);
这里的问题是当数据点不存在时.getValue(Class<T>)返回一个装箱类型,例如Integerwhich may be null。如果尝试将返回值分配给原始类型,则需要对该值进行拆箱,拆箱会null导致空指针异常。
为了保护null值,您需要添加null-check:
Integer value = dataSnapshot.child(user.getUid()).child("points").getValue(int.class);
if (value != null) {
points = value;
} else {
// TODO
// points = ???
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10666 次 |
| 最近记录: |