我正在尝试制作一个返回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/

10-11 02:59
查看更多