目前,为了从firebase数据库获取数据,我使用button来获取数据并将其显示到textview中。但是,每次上传数据时,我都需要点击按钮才能显示数据。
因此,有没有办法在上传会话后立即显示数据而不是点击按钮来显示数据?
下面的代码显示了我如何通过点击成功运行的按钮来显示数据。
谢谢!
fetch=(Button) v.findViewById(R.id.bFetch_Schedule);
fetch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dayRef.child("Subject").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
textViewSubject_Schedule.setText(value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
dayRef.child("What is in our class?").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
textViewWhat_Schedule.setText(value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
答案 0 :(得分:1)
您需要使用addValueEventListener()
代替addListenerForSingleValueEvent()
。
每次数据更改时,都会调用您提供给addValueEventListener()
的侦听器。
您向addListenerForSingleValueEvent()
提供的监听器将使用该位置的数据值调用一次。
您可能还想查看addChildEventListener()
。有关doc的所有信息。
答案 1 :(得分:0)
您正在使用addListenerForSingleValueEvent
,它从Firebase获取值,然后停止收听。如果您使用与addValueEventListener
相同的代码,则会继续接收更新。
dayRef.child("Subject").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
textViewSubject_Schedule.setText(value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
您通常会将此代码放入活动的生命周期事件中,例如onCreate
或onStart
。