tout d'abord, je suis un débutant dans le monde Android, alors veuillez m'excuser si c'est une question stupide ..
J'essaie de faire ce qui suit:
Et ces étapes 1 à 3 sont exécutées dans la boucle For pour le nombre de tentatives donné par l'utilisateur.
Maintenant, mon problème est le suivant: je suis bloqué à l'étape n ° 2.
Je ne parviens pas à utiliser la fonction waitfor(int seconds)
. J'ai essayé d'utiliser la méthode Runnable PostDelayed, mais cela ne me donne pas la sortie requise.
for(retry = UserChoice; retry > 0 && !isDataAvailable ; retry -- ){
enableInternet()
delay(10)
isDataAvailable = GetInternetAvailibility()
if(!isDataAvailable){
disableInternet()
}
}
J'ai essayé de mettre l'instruction isDataAvailable = GetInternetAvailibility()
dans postDelayed
du gestionnaire, mais cela provoque l'exécution de enableInternet()
disableInternet()
au même moment, alors que isDataAvailable = GetInternetAvailibility()
est exécuté après le délai.
D'après les journaux, je peux voir que enableInternet()
s'exécute pendant UserChoice
nombre de fois sans aucun délai.
Thread.sleep (10000) gèle l'interface utilisateur pendant 10 secondes ... Comment y parvenir?
EDIT: Laissez-moi clair:
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);
}
});
}
Maintenant, chaque fois que je clique sur le bouton, je peux voir dans les journaux que System.out imprime le message comme suit:
Avant
après
Avant
après
Avant
après
XXX
XXX
XXX
Mais je veux:
Avant
XXX
Après.
Avant
XXX
Après.
Avant
XXX
Après.
essaye ça:
public void check() {
isDataAvailable = GetInternetAvailibility()
if (!isDataAvailable) {
disableInternet();
enableInternet();
if (retry > 0) {
retry--;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
check();
}
}, 10000);
}
}
}
Cette façon peut vous aider.
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();
Essayez ci-dessous code.Espérons que cela vous aidera
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);
}
}
J'ai essayé de mettre la déclaration isDataAvailable = GetInternetAvailibility () dans postDelayed de handler mais cause cause enableInternet () disableInternet () à exécuter en même temps que isDataAvailable = GetInternetAvailibility () est exécuté après un délai.
Mettez l'instruction if et disableInternet () dans le postDelayed. enableInternet sera appelé, 10 secondes plus tard, il vérifiera si Internet est disponible, sinon il désactivera Internet.