web-dev-qa-db-fra.com

Fonction veille/attente/retard Android

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:

  1. Activer les données mobiles
  2. Attendez 10 secondes
  3. une. vérifier si Mobile a une adresse IP (données connectées avec succès)
    b. si non connecté, désactiver les données
    c. Aller à l'étape 1

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.

13
ShitalSavekar

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);
        }
    }
}
28
vipul mittal

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();
5
Xplosive

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);
    }

}
1
suresh

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.

0
FunkTheMonk