如何注销用户时,他想在安卓工作室



因此,在我的代码中,我创建了登录页面,它可以查看用户连接到哪个节点(驱动程序或客户(,并将它们相应地带到该页面。即使用户关闭了应用程序,它也会保持用户登录,但每当我试图从该页面注销时,应用程序就会崩溃这是我的登录页面

public class Login_Page extends AppCompatActivity {
ActivityLoginPageBinding binding;
ProgressDialog progressdialog;
FirebaseAuth auth;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityLoginPageBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
button = findViewById(R.id.Googlelogin);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Login_Page.this, SignUp.class);
startActivity(intent);
}
});
progressdialog = new ProgressDialog(Login_Page.this);
progressdialog.setTitle("Logging in");
progressdialog.setMessage("Please wait");
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
String uid = auth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child("Driver").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
Toast.makeText(Login_Page.this, "LoginDriver", Toast.LENGTH_SHORT);
Intent intent = new Intent(Login_Page.this, HomePage.class);
startActivity(intent);
} else {
startActivity(new Intent(Login_Page.this, Custhomepage.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
} else {
binding.Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressdialog.show();
auth.signInWithEmailAndPassword(binding.Email.getText().toString(), binding.Password.getText().toString())
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressdialog.dismiss();
if (task.isSuccessful()) {
Toast.makeText(Login_Page.this, "Success", Toast.LENGTH_SHORT).show();
String uid = auth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Users").child("Driver").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
Toast.makeText(Login_Page.this, "LoginDriver", Toast.LENGTH_SHORT);
Intent intent = new Intent(Login_Page.this, HomePage.class);
startActivity(intent);
} else {
startActivity(new Intent(Login_Page.this, Custhomepage.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
} else {
Toast.makeText(Login_Page.this, task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});
}
});

}
}
}

这是客户和司机主页的一部分,用户可以从那里注销

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.setting:
break;
case R.id.logout:
auth.signOut();
Intent intent=new Intent(HomePage.this,Login_Page.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}

编辑:当应用程序崩溃时,我会在我的Logcat 中得到这个

2021-06-22 11:22:59.829 10882-10882/com.example.deliveryapp E/InputEventReceiver: Exception dispatching input event.
2021-06-22 11:22:59.829 10882-10882/com.example.deliveryapp E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
2021-06-22 11:22:59.834 10882-10882/com.example.deliveryapp E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.signOut()' on a null object reference

此外,当我只有一个主页时,我没有这个问题但是,当我添加代码让用户登录到他们应该去的地方时(基本上是当我添加了1个主页时(,我在注销时开始遇到问题

在调用auth.signout()之前,您似乎尚未初始化auth对象。这可能是出现例外的原因。在您的case R.id.logout:中调用以下logout()方法

private void logout () {
FirebaseAuth mAuth = FirebaseAuth.getInstance ();
mAuth.signOut ();
finish ();
startActivity ( new Intent ( this, Login_Page.class ) );
}

希望以上代码片段对您有所帮助!

最新更新