不能影响声明的变量

时间:2016-03-23 11:44:17

标签: java android firebase firebase-realtime-database

我正在尝试创建一个返回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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

方法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的值没有改变。