首页 > 解决方案 > 从 Firebase Realtimedatabase 中删除用户时,Android 应用程序崩溃

问题描述

我正在开发我的应用程序,尽管存在一些小错误,但到目前为止,该应用程序运行良好。用户可以登录、登录和更改他的个人资料信息。在最后的步骤中,我添加了一个删除用户信息的功能。删除功能有效,因此用户信息从 FirebaseAuth 和 FirebaseRealtimeDatabase 中删除,但应用程序崩溃。在我已经遇到传递空值的问题之前,也许这与问题有关。

更新:我更改了代码并尝试实施建议,但它仍然崩溃......

日志猫:

09-18 16:28:20.474 23342-23342/com.example.login E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.login, PID: 23342
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.login.UserProfil.getVorname()' on a null object reference
    at com.example.login.ProfileActivity$1.onDataChange(ProfileActivity.java:59)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.0.0:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.0.0:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.0.0:55)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:234)
    at android.app.ActivityThread.main(ActivityThread.java:5526)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我的 ProfileActivity 的某些部分

 firebaseAuth=FirebaseAuth.getInstance();
    firebaseDatabase= FirebaseDatabase.getInstance();



    if (firebaseAuth.getCurrentUser() != null) {

        firebaseDatabase= FirebaseDatabase.getInstance();

        final DatabaseReference databaseReference = firebaseDatabase.getReference("Users").child(firebaseAuth.getUid());

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
               if (dataSnapshot.exists()) ;
                {
                    UserProfil userProfil = dataSnapshot.getValue(UserProfil.class);
                    profilVorname.setText(userProfil.getVorname());
                    profilNachname.setText(userProfil.getNachname());
                    profilStrasse.setText(userProfil.getStrasse());
                    profilHNr.setText(userProfil.getHnr());
                    profilPlz.setText(userProfil.getPlz());
                    profilStadt.setText(userProfil.getStadt());
                    profilLand.setText(userProfil.getLand());
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(ProfileActivity.this, "Database Error", Toast.LENGTH_SHORT).show();
            }
        });
    }else{
        startActivity(new Intent(ProfileActivity.this,NavActivity.class));
    }

我的 UpdatProfilActivity 的某些部分

loeschen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final DatabaseReference databaseReference = firebaseDatabase.getReference("Users").child(firebaseAuth.getUid());
            databaseReference.removeValue();
            FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();

            user.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        // firebaseAuth.signOut();
                        // startActivity(new Intent(UpdateProfilActivity.this, MainActivity.class));
                        //finish();
                    }

                }
            });
        }
    });

标签: javaandroidfirebasefirebase-realtime-databasefirebase-authentication

解决方案


使用时addValueEventListener,它会侦听当前引用发生的每个事件。当你删除它时dataSnapshot,监听器会出现 null 并getVorname()抛出异常。


推荐阅读