有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您不能在所处的上下文中重新分配该变量;局部变量必须是final有效的final,才能在匿名类中使用

    即使可以,在捕获新值之前,uidRef.addListenerForSingleValueEvent将被调用。新值不会注册侦听器,因为您从未将侦听器重新添加到新值中


    首先,删除在else块中创建的本地uidRef,以避免阴影问题

    在else块中,您将从原始uidRef中删除侦听器(当前为驱动程序-这将从驱动程序中删除侦听器)。你可以通过

    uidRef.removeValueListener(this)
    

    然后,您将获得您想要的子级(客户),并将侦听器添加到新的子级

    你可以通过

    reference.child("Customer").child(uid).addListenerForSingleValue(this)