2017-07-05 2 views
-1

Je suis confronté à un problème étrange. Je suis un utilisateur de connexion dans mon application, mais avant cela, je vérifie la connexion Internet. Pour cela, je suis en train de griller le message en disant attendre pendant que nous vérifions vos coordonnées. Tout cela fonctionne très bien, mais quand le réseau est pauvre, il ne griller aucun message et il faut du temps pour vous connecter.Le message Toast n'est pas affiché sur la mauvaise vitesse Internet

C'est mon code

@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.btn_google_signin: 
      showToast(getString(R.string.signing_in_wait_text)); // This message is not shown on poor network 
      overLay.setVisibility(View.VISIBLE); 
      if (AppUtil.isNetAvailable(this)) { 
       Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); 
       startActivityForResult(intent, REQUEST_CODE); 
      } else { 
       showToast(getString(R.string.internet_connection_down_or_poor)); 
       overLay.setVisibility(View.GONE); 
      } 
      break; 
    } 
} 

private void showToast(String msg) { 
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); 
} 

overlay est mon point de vue de chargement pour notifier qu'il signe dans app. Et ci-dessous est ma méthode isNetAvailable()

public static boolean isNetAvailable(final Context context) { 

    boolean isInternetWorking = false; 
    try { 
     isInternetWorking = (boolean) new InternetConnectionTest(context).execute().get(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     return isInternetWorking; 
    } 
} 

InternetConnectionTest est asyntask qui vérifient Internet. Voici comment je vérifie Internet

private static class InternetConnectionTest extends AsyncTask { 
    Context context; 

    InternetConnectionTest(Context context) { 
     this.context = context; 
    } 


    @Override 
    protected Boolean doInBackground(Object[] objects) { 

     Boolean success = false; 
     try { 
      URL url = new URL("https://google.com"); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setConnectTimeout(10000); 
      connection.connect(); 
      success = connection.getResponseCode() == 200; 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
     finally { 
      return success; 
     } 
    } 

Tout fonctionne bien quand Internet est bon. Et quand mon appareil n'est pas connecté à Internet, il affiche un message pour Internet est en panne. Mais le problème vient quand ma vitesse d'Internet est très basse. Il faut un certain temps pour se connecter, mais ne montre pas le message toast. S'il vous plaît aider

+0

La vitesse de connexion ne doit pas arrêter l'affichage du pain grillé. Êtes-vous sûr que ça frappe cette ligne? Mettez un point d'arrêt ou un Log.d là pour vous assurer. –

+0

@billynomates même je me demande pourquoi cela se passe. J'ai utilisé log et Log.d ... La ligne de message Toast s'exécute mais aucun toast n'apparaît à l'écran – FaisalAhmed

+1

Vous l'avez dit vous-même que la vérification de la connexion est une tâche asynchrone, mais dans votre cas ce n'est pas le cas, car vous arrêtez le thread pour attendre pour finir. Si Toast est également une tâche, l'arrêt du thread courant peut signifier que vous ne pourrez pas voir le toast apparaître, car il clignotera très rapidement. –

Répondre

0

lorsque le réseau est lent, cela signifie que la connexion est plus que le délai que vous définissez, de sorte que vous pouvez simplement ajouter votre méthode toast dans le bloc de capture de votre doOnground, cela fonctionnera!