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