mRefQ.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String txt = dataSnapshot.getValue(String.class);
showtext.setText(txt);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
因为它可以只在数据被更改时访问该值但我想在任何时候访问它(即oncreate)。
答案 0 :(得分:0)
来自Firebase documentation for listening to value events:
此方法在连接侦听器时触发一次,并在每次包括子项在内的数据发生更改时再次触发。
答案 1 :(得分:0)
您可以按照this steps访问数据一次。
正如@Frank所说,拥有一个监听器会在连接时和每次更改时为您提供访问权限。
请记住,所有这些都是在一个单独的线程上异步发生,因此为了确保onCreate上的值可用,您可能必须自己进行编排并保持主线程直到值已准备好使用。
答案 2 :(得分:0)
好吧所以事实证明它确实在创建时调用它,我只需要等待firebase加载应用程序
答案 3 :(得分:0)
在onCreate()方法中不会触发一次。如果没有removeEventListener,如果在OnCreate()方法中监听它,addValueEventListener将永远不会停止。当我运行它时,计数正在增加并且永不停止并且负载高达85%,所以我不得不关闭我的互联网并卸载它。但我enter image description here刚刚解决了。如果你想检查它,这是我的代码。
变量被声明为全局......
private DatabaseReference main;
private ValueEventListener valueEventListener;
在onCreate()方法中.....
valueEventListener = main.addValueEventListener(new
ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
boolean countExists = false;
int count = 1; //starts from 1 when data is uploaded for the first time
for (DataSnapshot out: dataSnapshot.getChildren()) {
if (out.getKey().equals("count")) {
String temp = out.getValue(String.class);
countExists = true;
try {
count = Integer.parseInt(temp);
}
catch (NumberFormatException e) {
count = 1;
}
break;
}
}
if (!countExists) {
main.child("count").setValue(String.valueOf(count));
Toast.makeText(getApplicationContext(), "Count Created", Toast.LENGTH_SHORT).show();
upload.setClickable(true);
}
else {
main.child("count").setValue(String.valueOf(++count));
Toast.makeText(getApplicationContext(), "Count Updated", Toast.LENGTH_SHORT).show();
upload.setClickable(true);
}
main.removeEventListener(valueEventListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Failed to upload", Toast.LENGTH_SHORT).show();
}
});
确保在onCreate()方法中调用removeEventListener时添加removeEventListener,否则它将永远不会停止。如果不在onStart()方法中调用removeEventListener,则不会出现问题。
这不是你的问题,而是......
如果您想要免费使用firebase,则无法让所有用户在没有必要的情况下下载您的数据,或者您的带宽可能在一天内变满。因此,我统计数据并只下载该子项的值并比较结果并进行更新。因此,当您调用addValueListener时,它可以减少带宽。