我想在插入之前检查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
答案 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。