student_edit.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
noof_placed=0;
placpercent=0.0;
enrolled=0;
for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
{
StudentDetail std =
postSnapshot.getValue(StudentDetail.class);
std.setRollno(postSnapshot.getKey());
studentlist.add(std);
enrolled++;
if (!std.getPlacementcompany().toString().trim().equals("0"))
{
noof_placed++;
}
}
placpercent=(noof_placed / total_students) * 100;
start_progressbar(noof_placed,placpercent);
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
这是我的侦听器,用于从firebase检索数据,当firebase中的数据更改时将触发它。如何以编程方式调用此侦听器
答案 0 :(得分:0)
student_edit.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// do your task
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
在需要时调用此方法。在Firebase中插入数据时,它不会每次都运行。
答案 1 :(得分:0)
要触发您的侦听器,您可以写入数据库student_edit
的位置,也可以隔离侦听器然后调用它。我认为写入数据库是不言自明的。要隔离侦听器,可以在类中添加一个成员字段:
ValueEventListener studentListener;
然后初始化该字段并基于该字段设置侦听器:
studentListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
noof_placed=0;
placpercent=0.0;
enrolled=0;
for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
{
StudentDetail std =
postSnapshot.getValue(StudentDetail.class);
std.setRollno(postSnapshot.getKey());
studentlist.add(std);
enrolled++;
if (!std.getPlacementcompany().toString().trim().equals("0"))
{
noof_placed++;
}
}
placpercent=(noof_placed / total_students) * 100;
start_progressbar(noof_placed,placpercent);
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
student_edit.addValueEventListener(studentListener);
然后您可以通过以下任何方式调用它:
studentListener.onDataChange(YOUR_SNAPSHOT);
当然,问题在于您随后需要保留快照。