[英]Call firebase getvalue oncreate
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)。
附加了侦听器后,将触发此方法,而每次更改数据(包括子级)时,都会触发此方法。
按照以下步骤,您只能访问一次数据。
正如@Frank提到的那样,有一个监听器可以使您在连接时以及每次更改时都具有访问权限。
请记住, 所有这些操作都是异步发生在一个单独的线程上的,因此,为了确保该值在onCreate上可用,您可能必须自己进行编排并按住主线程,直到准备好使用这些值为止。
好吧,事实证明它在创建时确实会调用它,我只需要等待Firebase在应用程序上加载
它不会在onCreate()方法中触发一次。 没有removeEventListener,如果您在OnCreate()方法中侦听addValueEventListener,它将永远不会停止。 计数不断增加,永不停止,运行时负载高达85%,因此必须关闭互联网并卸载它。 但是我在这里输入图像描述 t刚刚解决。 这是我的代码,如果您想检查一下。
变量声明为全局...
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,否则它将永不停止。 如果您不在onStart()方法中调用removeEventListener,则不会有问题。
这不是你的问题,但是...
如果您想免费使用Firebase,则不能让所有用户不必要地下载您的数据,否则您的带宽可能在一天内耗尽。 因此,我对数据进行计数,然后下载该孩子的值,然后比较结果并进行更新。 因此,当您调用addValueListener时,它可以减少带宽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.