如何在Android中以编程方式调用Firebase的ValueEventListener

时间:2018-07-16 18:22:05

标签: android firebase

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中的数据更改时将触发它。如何以编程方式调用此侦听器

2 个答案:

答案 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);

当然,问题在于您随后需要保留快照。