gpt4 book ai didi

java - Android:Firebase 数字增量

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:54 24 4
gpt4 key购买 nike

我坚持使用 Firebase 在 Java 中对一个值进行递增,但问题是它不会更新全局变量。当我在 onStart 调用 EventListener 时,它成功地向我显示了变量的正确值 (60)。当我想将它增加 10 时——单击按钮——它显示为 0。

long value;

@Override
protected void onStart() {
super.onStart();

final TextView mValue = (TextView) findViewById(R.id.some_textview);

mRef = new Firebase(some_correct_url);
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
value = (long) dataSnapshot.getValue();
mValue.setText(value+"");
}

@Override
public void onCancelled(FirebaseError firebaseError) {

}
});
}

当一个按钮被点击时,下面的函数被调用

public void addTen(View view) {
mRef = new Firebase(my_private_url);
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
value =(long) dataSnapshot.getValue();
value = value + 10;
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});

mRef.setValue(value);

}

所以总而言之,第一部分检索了变量的正确值,但第二部分没有增加正确的值。提前致谢!

编辑:顺便说一句,我将 Firebase 规则设置如下:

{
"rules": {
".read": "true",
".write": "true"
}
}

这是为了开发时间。

最佳答案

Firebase 监听器异步触发。您对 mRef.setValue(value) 的调用在监听器触发并更新 value 之前执行。像这样更改您的代码:

public void addTen(View view) {
mRef = new Firebase(my_private_url);
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
value =(long) dataSnapshot.getValue();
value = value + 10;
dataSnapshot.getRef().setValue(value);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}

请注意,addListenerForSingleValueEvent() 替换了 addValueEventListener()。我认为您不想在每次调用 addten() 时都堆积听众。

关于java - Android:Firebase 数字增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com