如果Firebase数据库ID存在,请通知用户

时间:2017-12-19 10:40:09

标签: java android firebase firebase-realtime-database

我想在插入之前检查id是否已存在(防止更新已存在的id)。 这是我到目前为止的代码:

database.child(id).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

问题在于,当id不存在时,它会显示两个toasts。但是,当它确实存在时,它只显示它存在。"之一。

如何显示"它存在。"只有当id存在时才会吐司/如何防止"它存在。"当id不存在时显示的吐司?

编辑:

Firebase数据库结构:

-DATABASE
    -ID
        -NAME
        -DESCRIPTION

3 个答案:

答案 0 :(得分:2)

试试这个

database.child(id).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.getValue()!=null) {
            Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
    }
});

答案 1 :(得分:1)

尝试将$(“#myButton”).click(clearCountdown) 方法替换为addValueEventListener

因为数据发生变化,可能会调用两次addListenerForSingleValueEvent,因为它首先显示Exist而不是Exist表示相同的id。

对于addValueEventListener firebase声明它应该:

  

一次读取数据。

     

在某些情况下,调用一次回调可能很有用   然后立即删除。我们已经创建了一个辅助函数来实现这一点   易:

答案 2 :(得分:1)

请这样做:

database.child(id).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        Toast.makeText(getApplicationContext(), "it exists.", Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(getApplicationContext(), "it's OK.", Toast.LENGTH_SHORT).show();
    }
}

由于valueeventListener将遍历所有子节点(id),因此您将获得Toast存在且存在且不存在的节点。

使用addListenerForSingleValueEvent然后它只会迭代您之前指定的ID。