如何在Firebase中检查写入任务是否成功

8

我完全不了解Firebase,需要知道如何检查我的写入任务是否成功,因为如果不这样做,MainActivity会启动并破坏我的Register进程。

这会检查用户名是否已经被使用,如果没有则注册用户:

Query usernamequery = myRef.orderByChild("Username").equalTo(Username);

usernamequery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        if (snapshot.exists()) {
            // TODO: handle the case where the data already exists
            editText.setError("Username taken!");
            return;
        }
        else {
            // TODO: handle the case where the data does not yet exist
            myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());
            myRef.child("Users").child(Username).child("Username").setValue(Username);
            startActivity(maps);
            finish();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(Username.this, "Error", Toast.LENGTH_LONG).show();
    }
});

但是我希望只有当myRef.child("Users").child(Username).child("Userid").setValue(user.getUid());完成任务且成功时,才会触发到主要活动(地图)的意图。

我该怎么办呢?


在值改变时放置一个监听器,当它发生改变时启动您的其他活动。 - Blundell
1个回答

31

为了知道服务器上的写操作何时完成,请添加完成监听器:

myRef.child("Users").child(Username).child("Userid").setValue(user.getUid(), new DatabaseReference.CompletionListener() {
    void onComplete(DatabaseError error, DatabaseReference ref) {
        System.err.println("Value was set. Error = "+error);
        // Or: throw error.toException();
    }
});
如果出现错误,详细信息会在error操作中。如果写入操作完成且没有问题,则error将为null
如果您想使用单个操作写入多个位置,可以查看update()方法 setValue()的正确过载在这里有文档记录。

2
但是在配置更改后(旧的“Activity”已被销毁并创建了一个新的“Activity”),我如何重新附加“DatabaseReference.CompletionListener”? - Stan Mots
2
如果操作失败,将会返回一个错误。如果操作成功,错误将为 null。 - Altaf Shaikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接