【问题标题】:How to invoke ValueEventListener of firebase programatically in android如何在android中以编程方式调用firebase的ValueEventListener
【发布时间】:2018-07-17 02:35:34
【问题描述】:
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 中的数据更改时触发。如何以编程方式调用此侦听器

【问题讨论】:

  • 对不起,你的问题不清楚。请详细说明一下

标签: android firebase


【解决方案1】:
student_edit.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {

       // do your task
   }

   @Override
   public void onCancelled(FirebaseError firebaseError) {

   }
});

在需要时调用此方法。每次在firebase中插入数据时,它都不会运行。

【讨论】:

    【解决方案2】:

    要触发您的侦听器,您可以写入数据库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);
    

    当然问题是你需要保留快照。

    【讨论】:

    • 我必须动态更改“student_edit”的数据库引用。一旦引用发生更改,它必须使用一组新数据触发“student_edit”对象的 ValueEventListener。我将不胜感激您的解决方案。
    • 这意味着您需要将侦听器附加到 student_edit 的新值,并且可能从 student_edit 的旧值附加到 remove the listener
    猜你喜欢
    • 2016-12-22
    • 2018-08-16
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多