我的 activity 完成并导航到前一个 activity 而没有必要的代码

My activity finishes and navigates to the previous activity without the necessary code for that

我遇到了一个奇怪的问题,我正在尝试刷新当前的 activity 所以我传递了与两个意图参数相同的 activity Intent intent = new Intent(Profile_Page_Activity.this, Profile_Page_Activity.class); 然后 finish(); 之后出现,所以我不会同时拥有相同 activity 运行ning 的两个实例,但是当我 运行 是的,它首先显示了来自完全不同的 activity 的祝酒词,它在之前的活动中排在第二位,既不会导致当前的 activity,也不会导致当前的 activity 导致它,显示的 toast 不是来自当前的 activity,然后它继续到前一个 activity,最后到当前的 activity 我希望它导航到,就像它识别意图代码之前的 finish(); 代码一样,但我知道某处有问题,因为我肯定在 Intent intent = new Intent(Profile_Page_Activity.this, Profile_Page_Activity.class); startActivity(intent);

之后提供了 finish()

这是包含我遇到问题的代码点的方法

private void Updatecredentials2(String textfullname, String textUsername, String textemail, String text_del_phone, String textAddress, String stateAddress, String townAddress) {

        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
        HashMap<String, Object> userdata = new HashMap<>();
        userdata.put("email", textemail);
        userdata.put("name", textfullname);
        userdata.put("username", textUsername);
        userdata.put("delieveryphone", "+234" + text_del_phone);
        userdata.put("address", textAddress);
        userdata.put("State", stateAddress);
        userdata.put("Town", townAddress);

        databaseReference.child(path).updateChildren(userdata).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Toast.makeText(Profile_Page_Activity.this, "Credentials updated successfully", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(Profile_Page_Activity.this, Profile_Page_Activity.class);
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(Profile_Page_Activity.this, "Credentials update was unsuccessful", Toast.LENGTH_SHORT).show();
                }
            }
        });

    } 

这个方法引出了上面的方法

private void validateupdate2() {
        final String textfullname = fullname.getText().toString();
        final String textUsername = username.getText().toString();
        final String textemail = email.getText().toString();
        final String text_del_phone = del_phone.getText().toString();
        final String textAddress = address.getText().toString();
        final String stateAddress = state.getSelectedItem().toString();
        final String townAddress = town_et.getText().toString();

        if (TextUtils.isEmpty(textfullname) || TextUtils.isEmpty(textUsername) || TextUtils.isEmpty(textemail) || TextUtils.isEmpty(text_del_phone) || TextUtils.isEmpty(textAddress)) {
            Toast.makeText(Profile_Page_Activity.this, "Please fill out all fields", Toast.LENGTH_SHORT).show();
        } else {
            DatabaseReference cred_check = FirebaseDatabase.getInstance().getReference("Usernames");
            cred_check.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    for(DataSnapshot suu : snapshot.getChildren()){
                        if(suu.getValue().toString().equalsIgnoreCase(Prevalent.currentOnlineUser.getUsername())){
                            continue;
                        }
                        if(suu.getValue().toString().equalsIgnoreCase(textUsername)){
                            Toast.makeText(Profile_Page_Activity.this, "Username is taken, please provide another one", Toast.LENGTH_SHORT).show();
                        }else{
                            Updatecredentials2(textfullname, textUsername, textemail, text_del_phone, textAddress, stateAddress, townAddress);
                            break;
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
        }
    }

这是完全不同 activity 的方法,它包含在我的应用程序中显示的 toast,“已登录”toast 是显示

private void Allowaccess(final String useremail, final String userpassword) {
        final DatabaseReference cref;
        cref = FirebaseDatabase.getInstance().getReference("Users");
        cref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String email = useremail;
                String password = userpassword;

                if (snapshot.hasChild(email.replace(".", " "))) {
                    Users userdata = snapshot.child(email.replace(".", " ")).getValue(Users.class);
                    if (snapshot.child(email.replace(".", " ")).child("password").getValue().toString().equals(password)) {
                        Toast.makeText(MainActivity.this, "Already Logged in", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(MainActivity.this, HomeActivity2.class));
                        Prevalent.currentOnlineUser = userdata;
                        finish();
                    } else {
                        Toast.makeText(MainActivity.this, "Your password might have changed since your last login.", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(MainActivity.this, Login_Activity.class));
                        finish();
                    }
                } else {
                    Toast.makeText(MainActivity.this, "User does not exist", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(MainActivity.this, Login_Activity.class));
                    finish();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

关于 Allowaccess 方法的问题 - 似乎只要您在 firebase 数据库中更新某些内容,就会触发此方法中的侦听器。在 Profile_Page_Activity 上执行 databaseReference.child(path).updateChildren(userdata),这可能会触发任何已注册的侦听器,例如 Allowaccess 方法中的 cref.addValueEventListener。所以解决方案是在您成功登录后删除 ValueEventListener,这样就不会向它传递任何其他更改。

关于刷新你的 activity,我认为更合适的方法是在你想刷新你的 activity 时调用 recreate() 方法。

要刷新 activity,您应该调用 recreate() 方法