java - 从 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();
}
}
});
}
});
解决方案
使用时addValueEventListener
,它会侦听当前引用发生的每个事件。当你删除它时dataSnapshot
,监听器会出现 null 并getVorname()
抛出异常。
推荐阅读
- javascript - 为什么此输入类型=时间在某些带有“stepMismatch”的浏览器中无效:true?
- elasticsearch - ElasticSearch:如何使用查询结果进行新搜索
- antlr4 - ANTLR Java 8,以“returnStatement”作为开始规则的奇怪行为解析,
- apache - 如何在子域中显示来自主域的特定路由(video.domain.com 显示 domain.com/video)?
- python - 将多级索引的第一级旋转为多级列的第一级
- python - Python Discord 读取附加文件名
- snowflake-cloud-data-platform - Snowflake - 加载不同格式的多个文件的策略
- google-apps-script - 通过电子邮件将 Excel 文件作为指定 Google 工作表的附件发送
- android - 如何在@HiltViewModel 中@Inject 接口?
- kotlin - Ktor provider.xml No Persistence provider for EntityManager named