Java 如何正确地为延迟调用处理程序方法?

Java 如何正确地为延迟调用处理程序方法?,java,android,delay,handler,Java,Android,Delay,Handler,我正在开发一款具有内置功能的应用程序,可以连接到Wi-Fi接入点。用户输入要连接的接入点的密码后,将执行以下代码。 我的问题是,即使在我的android设备成功连接到AP后,大约2秒后,if语句仍会运行。有时它无法连接,但else语句运行。我做错了什么?有没有更简单的方法来完成我想做的事情 final WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERV

我正在开发一款具有内置功能的应用程序,可以连接到Wi-Fi接入点。用户输入要连接的接入点的密码后,将执行以下代码。 我的问题是,即使在我的android设备成功连接到AP后,大约2秒后,if语句仍会运行。有时它无法连接,但else语句运行。我做错了什么?有没有更简单的方法来完成我想做的事情

    final WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if (wifiMgr.isWifiEnabled()) {
                WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

                if (wifiInfo.getNetworkId() == -1) {
                    Log.v("rht", "Problems connecting. Try again.");
                    Toast.makeText(NetworkScanner.this, "Problems connecting. Try again.", Toast.LENGTH_LONG).show();
                }
                else {
                    Log.v("rht", "Successfully Connected.");
                }
            }
        }
    }, 4000);
你可以这样做

final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
        //Do something after 200ms
      }
    }, 200);
此解决方案仅在UI线程上有用。否则,在普通线程上,您需要实现looper,它不是最佳版本

有关详细信息,请参见初始化处理程序对象

调用以运行任务的线程

删除处理程序


用恳求的状态来施展魅力。出于某种原因,wifiInfo.getNetworkId==-1给了我意想不到的结果。最后,我找到了一种不同的方法来检查我的android设备是否连接到网络。 非常感谢多纳尔·拉弗蒂和阿尔芒。他们两人都为这项计划作出了贡献


我仍然得到一个不正确的输出。例如,如果连接不成功,我将看到已成功连接。我会尽快发布解决方案。无论如何谢谢你。
 Handler mHandler = new Handler();
    mHandler.posttoDealy(run,1000*10) // 10 Sec
Runnable run = new Runnable() {
      @Override
      public void run() {

//this will run after ten Sec

//mHandler.posttoDealy(run,1000*10) // 10 Sec for again and again loop

      }
    })
mHandler.removeCallback(run)
    final WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            if (wifiMgr.isWifiEnabled()) {

                SupplicantState supState;
                supState = wifiInfo.getSupplicantState();

                if(supState != SupplicantState.COMPLETED) {
                    Log.v("rht", "Problems connecting. Try again.");
                }
                else {
                    Log.v("rht", "Successfully Connected.");
                }
            }
        }
    }, 4000);