我想在插入之前检查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
请这样做:
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。
尝试用addValueEventListener
替换你的addListenerForSingleValueEvent
方法。
因为数据的变化可能会导致addValueEventListener
被调用两次,这就是它首次显示存在而不存在同一个id的原因。
对于addListenerForSingleValueEvent
firebase说它应该:
一次读取数据。
在某些情况下,调用一次然后立即删除回调可能很有用。我们已经创建了一个辅助函数来简化:
试试这样吧
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();
}
});