Firebase onDisconnect()。removeValue()即使在客户端连接时也会删除值

时间:2016-09-15 03:29:42

标签: android firebase firebase-realtime-database firebase-storage

我正在尝试在我的FirebaseDatabase和我正在开发的Android应用中构建在线系统。目前,我正在尝试在我的数据库上实现onDisconenct()方法。

private FirebaseAuth auth;
private FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference();

protected void onCreate(Bundle savedInstanceState){
dbRef.child("users").child("customers").child(auth.getCurrentUser().getUid()).onDisconnect().removeValue(new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError error, DatabaseReference firebase) {
            if (error != null) {
                System.out.println("could not establish onDisconnect event:" + error.getMessage());
            }
        }
    });
}

firebase JSON树的结构如此

APP>
 USERS>
  CUSTOMERS>
   UID-

我现在遇到的最大问题是onDisconnect().removeValue()总是在创建Activity时执行(即创建数据然后立即删除)。当应用仍然连接到数据库并进行身份验证时,会发生这种情况。

编辑:

实施此行代码

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            boolean connected = snapshot.getValue(Boolean.class);
            if (connected) {
                System.out.println("connected");
            } else {
                System.out.println("not connected");
                dbRef.child("users").child("customers").child(auth.getCurrentUser().getUid()).removeValue();
            }
        }

似乎应用程序不断连接和断开数据库...

1 个答案:

答案 0 :(得分:0)

猜猜我终于找到了问题的答案。如果将来有人面临这个问题...

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
        mUser.getToken(true)
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                    public void onComplete(@NonNull Task<GetTokenResult> task) {
                        if (task.isSuccessful()) {
                            idToken = task.getResult().getToken();
                        }
                    }

这一系列重复出现的代码导致我的客户端不断连接和断开连接。