【问题标题】:Return to method, which contains postDelayed返回方法,其中包含 postDelayed
【发布时间】:2016-11-25 14:10:49
【问题描述】:

我刚刚创建了布尔方法,最后应该返回一些布尔变量... 但我想在 1 秒后返回它(一些操作正在应用程序中进行) 此代码但不起作用... 我该怎么办?

private boolean variable;
public boolean Method(String device) {
    //some code here

    //then postdelayed
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //variable is set in other part of app
            return variable;
        }
    }, 1000);

}

【问题讨论】:

  • 到底发生了什么? “变量设置在应用程序的其他部分”是什么意思?你为什么不使用 EventBus 来做一些事情呢?
  • @Vucko 变量,我想返回我在相同代码上定义的...当方法启动时,它首先发送变量“设备”(输入),然后在代码,然后我想返回这个在代码中改变的变量......(对不起我的英语)
  • 我没有看到任何不正确的地方。这将正常工作。在app的其他部分设置变量本身肯定有问题。
  • @HusseinElFeky 他想要的实际上是不可能的,除非是睡眠。它绝对不正确 - 您不能从 void 函数返回值,也不能延迟返回
  • @HusseinElFeky 它在返回时说:“无法从具有 void 结果类型的方法返回值”,在最后一个括号上说:“缺少返回语句”

标签: android methods return


【解决方案1】:

您可以将该处理程序移动到您要调用的部分并获取该布尔变量,例如:

private String device;
private boolean variable;

public void doSomething() {
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (getBoolean(device)) {
                // Do something.
            }
        }
    }, 1000);
}

public boolean getBoolean(String device) {
    // Some code...
    return variable;
}

【讨论】:

    【解决方案2】:

    你没有。你需要重新架构你正在做的事情。延迟返回的唯一方法是阻止 UI 线程,这不是做任何事情的正确方法。你需要做的是让任何需要返回值的代码在 postDelayed Runnable 中执行。你想做的事永远不会成功。

    【讨论】:

    • 谢谢,我的想法有点不同;)
    猜你喜欢
    • 2011-06-09
    • 2019-11-02
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多