首先,我是Android世界的初学者,如果这是一个愚蠢的问题,请向我道歉..
我正在尝试做以下事情:
这些步骤1到3将在For循环中执行用户给定的重试次数。
现在我的问题是:我被困在第2步。
我无法使waitfor(int seconds)
功能。我尝试使用Runnable PostDelayed方法,但它没有给我所需的输出。
for(retry = UserChoice; retry > 0 && !isDataAvailable ; retry -- ){
enableInternet()
delay(10)
isDataAvailable = GetInternetAvailibility()
if(!isDataAvailable){
disableInternet()
}
}
我尝试将isDataAvailable = GetInternetAvailibility()
语句放入postDelayed
处理程序中,但导致enableInternet()
disableInternet()
同时执行,而isDataAvailable = GetInternetAvailibility()
执行后enableInternet()
执行延迟。
我可以从日志中看到UserChoice
执行public void onClick(View v) {
// Perform action on click
for(i=0; i<3; i++ ){
System.out.println("Before..");
delay(5);
System.out.println("after..");
}
}
public void delay(int seconds){
milliseconds = seconds * 1000;
runOnUiThread(new Runnable() {
@Override
public void run() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("XXX"); //add your code here
}
}, milliseconds);
}
});
}
次,没有任何延迟。
Thread.sleep(10000)只是冻结了用户界面10秒......我如何实现这一目标?
编辑:让我说清楚:{{1}}
现在每当我点击按钮时,我都会在日志中看到System.out将消息打印为:
前
前后
前后
后
XXX
XXX
XXX
但我想:
前
XXX
之后,
前
XXX
之后,
前
XXX
后。
答案 0 :(得分:28)
试试这个:
public void check() {
isDataAvailable = GetInternetAvailibility()
if (!isDataAvailable) {
disableInternet();
enableInternet();
if (retry > 0) {
retry--;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
check();
}
}, 10000);
}
}
}
答案 1 :(得分:5)
这种方式可以帮到你。
http://developer.android.com/reference/android/os/CountDownTimer.html
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
答案 2 :(得分:1)
尝试下面的代码。希望它能提供帮助
int i = 0;
int j = 3;
method() {
if (i < j) {
System.out.println("Before..");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("XXXXXX");
i++;
System.out.println("after");
method();
}
}, 1000);
}
}
答案 3 :(得分:0)
我试着把isDataAvailable = GetInternetAvailibility()语句 在postDelayed处理程序,但它导致enableInternet() disableInternet()在isDataAvailable =的同时执行 GetInternetAvailibility()在延迟后执行。
在postDelayed中放入if语句和disableInternet()。 enableInternet将被调用,10秒后它将检查互联网是否可用,如果没有,它将禁用互联网。