我正在尝试制作一个返回int变量的方法,但是该方法不会影响该变量。
这是我的代码:
int count;
public int getVotesForEvent(final String event_title) {
firebaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("Votes").exists()) {
boolean flag = false;
for (DataSnapshot event : dataSnapshot.child("Votes").getChildren()) {
String event_title2 = event.getKey();
if (event_title2.equals(event_title)) {
flag = true;
Toast.makeText(EventInfo.this, ""+Integer.parseInt(event.child("event_votes").getValue().toString()), Toast.LENGTH_SHORT).show();
count = Integer.parseInt(event.child("event_votes").getValue().toString());
}
}
if (flag != true) {
count = 0;
}
}
else {
count = 0;
}
}
});
return count;
}
问题是该行:
count = Integer.parseInt(event.child("event_votes").getValue().toString());
该行不影响变量
count
。我在这里做错了什么?
最佳答案
方法getVotesForEvent()
本身不调用内部代码。因此,当您的代码从count
返回时,getVotesForEvent()
的值不会更改。
这些方法仅添加具有定义行为的ValueEventListener(顾名思义:))。
仅在发生onDataChange
事件后,才执行内部代码。
从count
返回getVotesForEvent()
是没有意义的,它只会返回调用该方法时的值,而不是count
的值更改时(将来)。
换句话说,请重复:调用addValueEventListener()
时,您没有执行其中包含的代码。每当发生相应事件时,您仅“加载”要在以后执行的代码。
考虑一下您的代码:
int count;
public int getVotesForEvent(final String event_title) {
firebaseRef.addValueEventListener(what-shall-be-done-sometimes-in-the-future-when-onDataChange-event-occurs);
return count;
}
并且在这里您清楚地看到
count
的值没有改变。关于java - 不能影响声明的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36177283/