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