Mic*_*ael 4 java android firebase firebase-realtime-database
我坚持使用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) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
当单击按钮时,将调用以下功能
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);
}
Run Code Online (Sandbox Code Playgroud)
因此,总的来说,第一部分检索变量的正确值,但是第二部分没有增加正确值。提前致谢!
编辑:顺便说一下,我将Firebase规则设置如下:
{
"rules": {
".read": "true",
".write": "true"
}
}
Run Code Online (Sandbox Code Playgroud)
这是为了开发时间。
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) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
注意已addListenerForSingleValueEvent()替换addValueEventListener()。我认为您不希望每次addten()调用时都将监听器堆积起来。
| 归档时间: |
|
| 查看次数: |
6219 次 |
| 最近记录: |