まず第一に、私はAndroid worldの初心者なので、それが愚かな質問である場合は謝罪してください。
私は次のことをしようとしています:
そして、これらのステップ1から3は、ユーザー指定の再試行回数のForループで実行されています。
今、私の問題は次のとおりです。ステップ2で立ち往生しています。waitfor(int seconds)
関数を作成できません。 Runnable PostDelayedメソッドを使用してみましたが、必要な出力が得られません。
for(retry = UserChoice; retry > 0 && !isDataAvailable ; retry -- ){
enableInternet()
delay(10)
isDataAvailable = GetInternetAvailibility()
if(!isDataAvailable){
disableInternet()
}
}
ハンドラーのpostDelayed
にisDataAvailable = GetInternetAvailibility()
ステートメントを配置しようとしましたが、enableInternet()
が取得されると同時にdisableInternet()
isDataAvailable = GetInternetAvailibility()
が実行されます遅延後に実行されます。
ログから、enableInternet()
がUserChoice
回だけ遅延なく実行されることがわかります。
Thread.sleep(10000)はUIを10秒間フリーズするだけです...これを達成するにはどうすればよいですか?
編集:クリアさせてください:
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);
}
});
}
これで、ボタンをクリックするたびに、System.outが次のようにメッセージを出力するログを確認できます。
前
後
前
後
前
後
XXX
XXX
XXX
でも私はしたい:
前
XXX
後。
前
XXX
後。
前
XXX
後。
これを試して:
public void check() {
isDataAvailable = GetInternetAvailibility()
if (!isDataAvailable) {
disableInternet();
enableInternet();
if (retry > 0) {
retry--;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
check();
}
}, 10000);
}
}
}
この方法はあなたを助けるかもしれません。
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();
以下のコードを試してみてください。
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);
}
}
ハンドラーのpostDelayedにisDataAvailable = GetInternetAvailibility()ステートメントを入れようとしましたが、isDataAvailable = GetInternetAvailibility()が遅延後に実行されている間にenableInternet()disableInternet()が同時に実行されています。
IfステートメントとdisableInternet()をpostDelayedに入れます。 enableInternetが呼び出され、10秒後にインターネットが利用可能かどうかを確認し、利用可能でない場合は無効にします。