java在安卓studio中通过if-else子句后,如何访问变量的新值
我正在创建一个代码,默认情况下,引用位于drivers节点中,如果快照不存在,则更改为customer,但问题是它没有更改。当我查看代码时,我意识到这个变量没有被使用,所以我想知道是否还有其他方法可以这样做。 这是我的密码
auth=FirebaseAuth.getInstance();
uid = auth.getCurrentUser().getUid();
button=findViewById(R.id.button2);
Fixmail = findViewById(R.id.fixedemail);
password=findViewById(R.id.editTextTextPassword);
reference = FirebaseDatabase.getInstance().getReference("Users");
DatabaseReference uidRef = reference.child("Driver").child(uid); //this variable
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {//TODO find how to change uidRef
if (snapshot.exists()) {
Users usersnapshot = snapshot.getValue(Users.class);
if (usersnapshot != null) {
String Email = usersnapshot.getMail();
Fixmail.setText(Email);
}
} else {
final DatabaseReference uidRef=reference.child("Customer").child(uid);
Users usersnapshot = snapshot.getValue(Users.class);
if (usersnapshot != null) {
String Email = usersnapshot.getMail();
Fixmail.setText(Email);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
# 1 楼答案
您不能在所处的上下文中重新分配该变量;局部变量必须是
final
或有效的final,才能在匿名类中使用即使可以,在捕获新值之前,
uidRef.addListenerForSingleValueEvent
将被调用。新值不会注册侦听器,因为您从未将侦听器重新添加到新值中首先,删除在else块中创建的本地uidRef,以避免阴影问题
在else块中,您将从原始
uidRef
中删除侦听器(当前为驱动程序-这将从驱动程序中删除侦听器)。你可以通过然后,您将获得您想要的子级(客户),并将侦听器添加到新的子级
你可以通过