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

问题描述 投票:0回答:3

我想在插入之前检查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不存在时显示toast?

编辑:

Firebase数据库结构:

-DATABASE
    -ID
        -NAME
        -DESCRIPTION
java android firebase firebase-realtime-database
3个回答
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。


1
投票

尝试用addValueEventListener替换你的addListenerForSingleValueEvent方法。

因为数据的变化可能会导致addValueEventListener被调用两次,这就是它首次显示存在而不存在同一个id的原因。

对于addListenerForSingleValueEvent firebase说它应该:

一次读取数据。

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


1
投票

试试这样吧

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();
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.