【问题标题】:firebase gets data too many timesfirebase 获取数据的次数过多
【发布时间】:2018-10-26 03:23:16
【问题描述】:

我使用recyclerview、arraylist和firebase来获取和显示数据,但是数据被添加到列表中的次数太多了..

这是我的代码

database=FirebaseDatabase.getInstance();
    mRef=database.getReference("SETS");

    mRef.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot==null) return;
            for(DataSnapshot userSanpshot : dataSnapshot.getChildren())
            {
                if(userSanpshot.child("DETAIL").getValue()==null) break;
               single.Detail=userSanpshot.child("DETAIL").getValue().toString();
                /~/
               list.add(single);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    adapter.setItems(list);

这是我向 firebase 发送数据时的代码

Button sharebut=(Button)findViewById(R.id.usersend);
    sharebut.setOnClickListener(
            new FloatingActionButton.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mDatabase.child("SETS").child(userId).child("DETAIL").setValue(detailText.getText().toString());
                    /~/
                    finish();
                }
            }
    );

}

【问题讨论】:

  • 添加 list.clear();作为 onDataChange 方法中的第一行
  • 签出this
  • @JinsonPaul 谢谢,它有效。但是当我重新启动应用程序时,列表会发生变化;所有数据更改为最新数据。
  • 因为 addValueEventListener 总是蚀刻最新的数据,或者你指定的节点中存储的所有数据

标签: android firebase


【解决方案1】:

试试这个方法

mRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    // do here your work
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    // handle error here
  }
});

【讨论】:

  • 我改变了,我认为数据的数量与firebase中的相​​同..但数据都相同(最新数据)
猜你喜欢
  • 2020-08-15
  • 2017-08-03
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2018-06-20
  • 2018-03-17
相关资源
最近更新 更多