Java Android Firebase注销应用程序在我注销后崩溃
我有处理注销的主要活动。问题是在我注销后,应用程序在Java Android Firebase注销应用程序在我注销后崩溃,java,android,firebase,firebase-realtime-database,firebase-authentication,Java,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我有处理注销的主要活动。问题是在我注销后,应用程序在verifyUserExistance()第行崩溃: String userID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid(); 其中: E/AndroidRuntime:致命异常:主 进程:com.google.firebase.quickstart.auth,PID:8459 java.lang.NullPointerException 位于java.util.Obje
verifyUserExistance()
第行崩溃:
String userID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
其中:
E/AndroidRuntime:致命异常:主
进程:com.google.firebase.quickstart.auth,PID:8459
java.lang.NullPointerException
位于java.util.Objects.requirennull(Objects.java:203)
在com.google.firebase.quickstart.auth.social.Main_Chat_Activity$3.lambda$null$1$Main_Chat_Activity$3(Main_Chat_Activity.java:372)
在com.google.firebase.quickstart.auth.social.-$$Lambda$Main_Chat_Activity$3$87CwjFnoJAhucBGNsLP_MxK833o.onComplete(未知来源:2)
在com.google.android.gms.tasks.zzj.run上(com.google.android.gms:play services tasks@@17.2.0:4)
位于android.os.Handler.handleCallback(Handler.java:873)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7050)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
下面是我使用的代码:
@Override
protected void onStart() {
super.onStart();
usersRef.child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.hasChild("name"))
{
sendUserToLoginActivity();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
if (mAuth == null || currentUser == null || mAuth.getCurrentUser().getUid() == null ){
finish();
sendUserToLoginActivity();
}
else {
if(mAuth.getCurrentUser().getProviderId() == "google.com"){
user.setmGoogleSignInClient(mGoogleSignInClient);
}
user.setMauth(mAuth);
if (loginOutFlag>-1)
verifyUserExistence();
}
checkLocation();
if (isNew!=null)
{
if (isNew.equals("true")){
sendUserToSettingsActivity();
}
}
}
验证UserExistance的方法是
private void verifyUserExistence() {
if (!verified && loginOutFlag > -1) {
String currentUserID = mAuth.getCurrentUser().getUid();
try {
rootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child("name").exists()) {
loginOutFlag = 1;
Toast.makeText(Main_Chat_Activity.this, "Welcome" + dataSnapshot.child("name").getValue().toString(), Toast.LENGTH_SHORT).show();
Log.w("Reportname:", dataSnapshot.child("name").getValue().toString());
Calendar cal = Calendar.getInstance();
final String timeNDate = cal.getTime().toString();
HashMap<String, Object> profileMap = new HashMap<>();
profileMap.put("connection", timeNDate);
rootRef.child("Users").child(currentUserID).updateChildren(profileMap)
.addOnCompleteListener(task ->
{
if (task.isSuccessful()) {
Toast.makeText(Main_Chat_Activity.this, "Success ", Toast.LENGTH_SHORT).show();
verified = true;
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task13 -> {
String userID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
if (!task13.isSuccessful()) {
Log.w("FCM", "Fetching FCM registration token failed", task13.getException());
return;
}
// Get new FCM registration token
String deviceToken = task13.getResult();
// Log and toast
Log.d("FCM", deviceToken);
Toast.makeText(Main_Chat_Activity.this, deviceToken, Toast.LENGTH_SHORT).show();
final int[] no = {0};
DatabaseReference tokens = usersRef.child(userID).child("device_tokens");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
no[0] = (int) snapshot.getChildrenCount();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
tokens.addListenerForSingleValueEvent(valueEventListener);
String devName = "device" + no[0];
String token = deviceToken.split(":")[1];
usersRef.child(userID).child("device_tokens").child(devName)
.setValue(token)
.addOnCompleteListener(task12 -> {
if (task12.isSuccessful()) {
Toast.makeText(Main_Chat_Activity.this, "Token updated succesfully.", Toast.LENGTH_LONG).show();
}
});
});
} else {
String errorMSG = Objects.requireNonNull(task.getException()).toString();
//user.setMauth(null);
Toast.makeText(Main_Chat_Activity.this, "Error : " + errorMSG, Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
catch (Exception e)
{
Log.d("EXCEPTION", e.toString());
}
}
}
private void verifyUserExistence(){
如果(!verified&&loginOutFlag>-1){
字符串currentUserID=mAuth.getCurrentUser().getUid();
试一试{
rootRef.child(“用户”).child(currentUserID).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
如果(dataSnapshot.child(“name”).exists()){
loginOutFlag=1;
Toast.makeText(Main_Chat_Activity.this,“Welcome”+dataSnapshot.child(“name”).getValue().toString(),Toast.LENGTH_SHORT.show();
Log.w(“Reportname:”,dataSnapshot.child(“name”).getValue().toString());
Calendar cal=Calendar.getInstance();
最终字符串timeNDate=cal.getTime().toString();
HashMap profileMap=新的HashMap();
profileMap.put(“连接”,timeNDate);
rootRef.child(“用户”).child(currentUserID).updateChildren(profileMap)
.addOnCompleteListener(任务->
{
if(task.issusccessful()){
Toast.makeText(主聊天活动。此“成功”,Toast.LENGTH\u SHORT.show();
验证=真实;
FirebaseMessaging.getInstance().getToken()的
.addOnCompleteListener(任务13->{
字符串userID=Objects.requirennull(mAuth.getCurrentUser()).getUid();
如果(!task13.issusccessful()){
Log.w(“FCM”,“获取FCM注册令牌失败”,task13.getException());
返回;
}
//获取新FCM注册令牌
字符串deviceToken=task13.getResult();
//原木和烤面包
Log.d(“FCM”,deviceToken);
Toast.makeText(Main_Chat_Activity.this,deviceToken,Toast.LENGTH_SHORT).show();
final int[]no={0};
DatabaseReference令牌=usersRef.child(userID.child)(“设备_令牌”);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
否[0]=(int)snapshot.getChildrenCount();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
};
addListenerForSingleValueEvent(valueEventListener);
字符串devName=“设备”+否[0];
字符串标记=deviceToken.split(“:”[1];
usersRef.child(userID.child(“设备令牌”).child(devName)
.setValue(令牌)
.addOnCompleteListener(任务12->{
if(task12.issusccessful()){
Toast.makeText(Main_Chat_Activity.this,“令牌已成功更新)”,Toast.LENGTH_LONG.show();
}
});
});
}否则{
字符串errorMSG=Objects.requireNonNull(task.getException()).toString();
//user.setMauth(空);
到
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.main_logout_option) {
updateUserStatus("offline");
String currentUserID = mAuth.getCurrentUser().getUid();
rootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child("name").exists()) {
Calendar cal = Calendar.getInstance();
final String timeNDate = cal.getTime().toString();
HashMap<String, Object> profileMap = new HashMap<>();
profileMap.put("connection", timeNDate);
rootRef.child("Users").child(currentUserID).updateChildren(profileMap)
.addOnCompleteListener(task ->
{
if (task.isSuccessful()) {
loginOutFlag = -1;
} else {
String errorMSG = Objects.requireNonNull(task.getException()).toString();
Toast.makeText(Main_Chat_Activity.this, "This error : " + errorMSG, Toast.LENGTH_SHORT).show();
}
mGoogleSignInClient.signOut().addOnCompleteListener(task1 -> {
if (task1.isSuccessful()){
mAuth.signOut(); // very important if you are using firebase.
LoginManager.getInstance().logOut();
sendUserToLoginActivity();
finish();
}
});
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
sendUserToLoginActivity();
}
if (item.getItemId() == R.id.main_settings_option) {
sendUserToSettingsActivity();
}
if (item.getItemId() == R.id.main_find_friends_option) {
sendUserToFindFriendsActivity();
}
return true;
}
at line String userID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid()