Android 在我注销并登录后,firebase实时数据库没有响应。没有错误,所有数据库引用都是正确的

Android 在我注销并登录后,firebase实时数据库没有响应。没有错误,所有数据库引用都是正确的,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在开发android应用程序,其中我使用firebase实时数据库和firebase身份验证。到现在为止,一切都很顺利。但当我注销并再次登录时,身份验证成功,但实时数据库没有响应。当我在另一部手机上安装相同的apk文件时,它可以正常工作,并且在注销后出现相同的问题。 我找到了一个解决方案,改变网络,它的工作有时会出现问题 package com.*****.****; import androidx.annotation.NonNull; import androidx.appcompat

我正在开发android应用程序,其中我使用firebase实时数据库和firebase身份验证。到现在为止,一切都很顺利。但当我注销并再次登录时,身份验证成功,但实时数据库没有响应。当我在另一部手机上安装相同的apk文件时,它可以正常工作,并且在注销后出现相同的问题。 我找到了一个解决方案,改变网络,它的工作有时会出现问题

package com.*****.****;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.Objects;


public class Login extends AppCompatActivity {

    private Button loginButton;
    private ImageView navButton;
    private TextView signUpButton, forgotButton;
    private EditText emailField, passwordField;
    private ProgressBar progressBar;

    private FirebaseAuth mAuth;
    private DatabaseReference mLoginRef;
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        init();


        navButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                drawerLayout.openDrawer(GravityCompat.START);
            }
        });

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawerLayout, R.string.app_name, R.string.app_name);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                int id = item.getItemId();
                switch (id) {
                    case R.id.login_nav_lang:
                        break;
                    case R.id.login_nav_display:
                        break;
                    case R.id.login_nav_invite_buddy:
                        startActivity(new Intent(Login.this, BDTSignUp.class));
                        break;
                    case R.id.login_nav_franchise:

                    case R.id.login_nav_career:

                    case R.id.login_nav_privacy_policy:

                    case R.id.login_nav_about:

                    case R.id.login_nav_contact:

                    default:
                        return true;
                }

                return true;
            }
        });

        signUpButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(Login.this, SignUpIntro.class));
                finish();
            }
        });

        forgotButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //TODO Fill this slot
            }
        });

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                progressBar.setVisibility(View.VISIBLE);
                validateFields();
            }
        });
    }

    private void validateFields() {
        String email = emailField.getText().toString().trim();
        String password = passwordField.getText().toString().trim();

        if (email.equals("")) {
            emailField.setError("Email ID is Required");
            emailField.requestFocus();
            progressBar.setVisibility(View.GONE);
        } else if (password.equals("")) {
            passwordField.setError("Password is Required");
            passwordField.requestFocus();
            progressBar.setVisibility(View.GONE);
        } else {
            login(email, password);
        }


    }

    private void login(String email, String password) {
        try {
            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                String uid = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
                                getUserDetails(uid);
                            } else {
                                Toast.makeText(Login.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);
                            }
                        }
                    });
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
            progressBar.setVisibility(View.GONE);
        }
    }
    
//
//
//This is where problem occours. At beggining it works fine and after logout, database is not responding.
//
// 
    private void getUserDetails(String uid) {
        mLoginRef.child(uid)
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if (snapshot.exists()) {
                            String name = snapshot.child("name").getValue().toString();
                            //Here is where I face problem.
                            Toast.makeText(Login.this, name, Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                        Toast.makeText(Login.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

    private void init() {
        navButton = (ImageView) findViewById(R.id.login_nav_button);

        drawerLayout = (DrawerLayout) findViewById(R.id.login_main_activity);
        navigationView = (NavigationView) findViewById(R.id.login_navigation_view);

        loginButton = (Button) findViewById(R.id.login_login_button);

        signUpButton = (TextView) findViewById(R.id.login_signup_button);
        forgotButton = (TextView) findViewById(R.id.login_forgot_button);

        progressBar = (ProgressBar) findViewById(R.id.login_progress);
        progressBar.setVisibility(View.GONE);

        mAuth = FirebaseAuth.getInstance();
        mLoginRef = FirebaseDatabase.getInstance().getReference().child("login");
        mLoginRef.keepSynced(true);
    }
}
package com.*****;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.ActionBarDrawerToggle;
导入androidx.appcompat.app.appcompat活动;
导入androidx.core.view.GravityCompat;
导入androidx.drawerlayout.widget.drawerlayout;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.android.material.navigation.NavigationView;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入java.util.Objects;
公共类登录扩展了AppCompatActivity{
私人按钮登录按钮;
私有图像查看导航按钮;
私有文本视图注册按钮,放弃按钮;
私有EditText电子邮件字段,密码字段;
私人ProgressBar ProgressBar;
私人消防队;
私有数据库参考mLoginRef;
私人抽屉布局;
私有导航视图导航视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
init();
navButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
抽屉布局。打开抽屉(重力compat.START);
}
});
ActionBarDrawerToggle切换=新建ActionBarDrawerToggle(
这,抽屉布局,R.string.app\u name,R.string.app\u name);
抽屉布局。添加抽屉链接(切换);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(新建navigationView.OnNavigationItemSelectedListener()){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
int id=item.getItemId();
开关(id){
案例R.id.login\u nav\u lang:
打破
案例R.id.login\u导航显示:
打破
案例R.id.login\u nav\u invite\u buddy:
startActivity(新意图(Login.this、BDTSignUp.class));
打破
案例R.id.login\u nav\u特许经营权:
案例R.id.login\u nav\u职业:
案例R.id.登录\导航\隐私\政策:
案例R.id.login\u nav\u关于:
案例R.id.login\u nav\u联系人:
违约:
返回true;
}
返回true;
}
});
signUpButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
startActivity(新意图(Login.this、SignUpIntro.class));
完成();
}
});
forgotButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//要填补这个空缺吗
}
});
loginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
progressBar.setVisibility(View.VISIBLE);
validateFields();
}
});
}
私有void validateFields(){
字符串email=emailField.getText().toString().trim();
字符串密码=passwordField.getText().toString().trim();
if(email.equals(“”){
emailField.setError(“需要电子邮件ID”);
emailField.requestFocus();
progressBar.setVisibility(View.GONE);
}else if(密码等于(“”){
设置错误(“需要密码”);
passwordField.requestFocus();
progressBar.setVisibility(View.GONE);
}否则{
登录(电子邮件、密码);
}
}
私有无效登录(字符串电子邮件、字符串密码){
试一试{
mAuth.使用电子邮件和密码登录(电子邮件,密码)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串uid=Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
getUserDetails(uid);
}否则{
Toast.makeText(Login.this,task.getException().getMessage(),Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}捕获(例外e){
Toast.makeText(this,e.getMessage(),Toast.LENGTH_SHORT.show();
掠夺