【问题标题】:Can't affect declared variable不能影响声明的变量
【发布时间】:2016-03-23 11:44:16
【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

  • “event_votes”的值是多少?
  • 尝试更详细地描述您期望发生的事情。您是否期望在调用getVotesForEvent() 之后count 的值会发生变化?因为它不会:)
  • firebaseRef 内部的某个人将致电onDataChange()。只有当这种情况发生时,您才会在变量中看到 chenge。
  • 你的Toast 出现了吗.. 也就是 if 语句中的代码肯定会运行。
  • 然后像这样改变你的onDataChange() 方法来测试它: public void onDataChange(DataSnapshot dataSnapshot) { count = 5; }

标签: java android firebase firebase-realtime-database


【解决方案1】:

getVotesForEvent() 方法本身调用里面的代码。所以count 的值不会随着您的代码从getVotesForEvent() 返回而改变。

这些方法只添加一个具有定义行为的 ValueEventListener(顾名思义:))。

只有onDataChange事件发生后,才会执行里面的代码。

getVotesForEvent()返回count是没有意义的,它只会返回你调用那个方法时的值,而不是当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 的值没有改变。

【讨论】:

  • 感谢您的解释。但是您建议我对上面的代码进行哪些更改?
  • 但是op说他可以看到那个方法里面的Toast消息,所以代码正在执行中。
  • 是的,它正在进入“if()”。
  • 您是否尝试过我在评论中的建议?像这样更改您的 onDataChange() 方法以对其进行测试:public void onDataChange(DataSnapshot dataSnapshot) { count = 5; } 我的意思是删除您那里的所有其他逻辑,并将 only 分配给计数。或者你可能有count++。我仍然不明白从getVotesForEvent() 返回count 的含义,它只会返回您调用 that 方法时的值,而不是当count 的值发生变化时.
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 2023-02-08
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多