Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Firebase注销应用程序在我注销后崩溃_Java_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

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()