为什么在应用程序处于后台后从firebase删除数据不起作用?

时间:2017-05-12 17:12:06

标签: android firebase

我试图从实时firebase中删除一些用户。它的工作,但如果我再次打开应用程序时将应用程序置于后台,则不会从db中删除用户。 在调试模式下,用户被删除,但没有休息。 我还使用Firebase提供的电子邮件/密码身份验证。

这是我的代码(方法是在菜单的onOptionsItemSelected中调用):

    public void reAuthenticateUser(String password) {
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    AuthCredential credential = EmailAuthProvider
            .getCredential(user.getEmail(), password);
    user.reauthenticate(credential)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(!task.isSuccessful()){
                        handleExceptions(task.getException());
                    }
                    else{
                        dialog.dismiss();
                        Toast.makeText(BaseActivity.this,DBHelper.getInstance().getDatabase().toString(),Toast.LENGTH_LONG).show();
                        DBHelper.getInstance().deleteUser(user.getUid());
                        //ref.child("users").child(user.getUid()).setValue(null);
                        Log.d("ReAuth", "User re-authenticated.");
                        deleteUserAccount();
                    }
                }
            });

}

这是我的DBHelper类:

public class DBHelper {

private static DBHelper instance = null;
private FirebaseDatabase database;
private DatabaseReference ref;

private DBHelper(){
    database = FirebaseDatabase.getInstance();
}

public static DBHelper getInstance() {
    if(instance == null)
        instance = new DBHelper();

    return instance;
}

public void saveUserOnDB(String userId, String name, String email) {
    ref = database.getReference().child("users");
    ref.child(userId).setValue(new User(name, email));
}

public void deleteUser(String userId) {
    ref = database.getReference().child("users");
    ref.child(userId).setValue(null);
}

}

EDIT 数据库规则:

     {
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

1 个答案:

答案 0 :(得分:0)

private static DBHelper dbHelper = new DBHelper();可能是你的问题。 当应用程序处于后台时,操作系统可能会将其终止以释放一些内存。如果再次将它带到前面,可以重新启动活动,因为它们将状态存储到磁盘,但是静态变量会丢失。