【问题标题】:Android/Java - Wait for AsyncTask to end before performing next functionAndroid/Java - 在执行下一个函数之前等待 AsyncTask 结束
【发布时间】:2014-11-24 13:03:50
【问题描述】:

我正在创建一个应用程序,它将在其MainActivity 中显示已配置的 Wi-Fi 网络列表。现在,在获取已配置网络列表之前,我的应用程序会检查 Wi-Fi 是否已打开。如果没有,它会显示一个AlertDialog,其中包含一个“打开 Wi-Fi” Button,它会触发一个打开 Wi-Fi 的 AsyncTask。

现在,我正在使用此代码来获取已配置的 Wi-Fi 网络列表

@SuppressWarnings("deprecation")
private ArrayList<String> getAvailableNetworks() {

    manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    availableNetworks = new ArrayList<String>();

    if (!manager.isWifiEnabled()) {
        showDialog(2);
    }

    if (manager.isWifiEnabled()) {

        configuredNetworks = manager.getConfiguredNetworks();

        for (int i = 0; i < configuredNetworks.size(); i++) {
                    availableNetworks.add(configuredNetworks.get(i).SSID.replaceAll("\"", ""));
        }
    }

    return availableNetworks;
}

现在的问题是,当应用程序发现 Wi-Fi 已关闭时,它只会使用 showDialog(2); 显示 AlertDialog,然后继续执行下一行代码,留下配置的网络列表完全空白。

如何让它等到AsyncTask 完成打开 Wi-Fi 后再继续执行下一行代码?

提前致谢。

【问题讨论】:

  • 您可以在此处使用 if-else,如果在侦听器中用于 wifi 状态更改,也可以将您的内容放在第二个位置,并在连接时运行代码。

标签: java android android-asynctask


【解决方案1】:

您可以在 OnPreExecute 启动一个不确定的进度对话框(不可取消),然后在 onPostExecute 将其关闭

如果您不希望代码在 asyncTask 完成之前开始执行,只需将该代码放在 AsyncTask 的 onPostExecute 方法中

【讨论】:

  • 对不起。我还是不明白,在AsyncTask 完成之前,这将如何阻止应用程序继续执行下一行代码?
  • 那你为什么不把代码放在你想在asyncTask之后执行的onPostExecute呢?
  • 不,先生。出于某种原因,即使将代码放入我的AsyncTask 的onPreExecute 部分,列表仍然为空@
  • 抱歉,我只将代码放在onPostExecute 中。我在输入评论时犯了一个错误。
  • 奇怪的是你会发布你在 onPostExecute 中的代码吗?
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多