2017-07-05 4 views
-1

Ich bin mit einem seltsamen Problem konfrontiert. Ich bin Benutzer in meiner App anmelden, aber vorher überprüfe ich für die Internetverbindung. Dafür rate ich Nachricht, die sagt, warte, während wir Ihre Details überprüfen. Das alles funktioniert gut, aber wenn Netzwerk schlecht ist es nicht jede Nachricht Toast und es braucht Zeit, um sich anzumelden.Toast-Nachricht nicht auf schlechten Internet-Geschwindigkeit angezeigt

Dies ist mein 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 ist mein Laden Ansicht mitzuteilen, dass er Unterzeichnung in App Und unten ist mein isNetAvailable() -Methode

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 ist asyntask, die für das Internet überprüfen. Dies ist, wie ich für das Internet suche

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

Alles funktioniert gut, wenn Internet Geschwindigkeit ist gut. Und wenn mein Gerät nicht mit dem Internet verbunden ist, zeigt es eine Nachricht für das Internet an. Aber das Problem kommt, wenn meine Internetgeschwindigkeit sehr niedrig ist. Es dauert einige Zeit, um sich anzumelden, es wird jedoch keine Toast-Nachricht angezeigt. Bitte helfen

+0

Die Verbindungsgeschwindigkeit sollte den Toast nicht stoppen. Bist du sicher, dass es diese Zeile erreicht? Setzen Sie einen Haltepunkt oder ein Log.d dort sicher. –

+0

@billynomates sogar ich frage mich, warum das passiert. Ich verwendete Protokoll und Log.d ... Toast Meldungszeile wird ausgeführt, aber keine Toast auf dem Bildschirm angezeigt – FaisalAhmed

+1

Sie sagten selbst, dass das Überprüfen der Verbindung ist eine asynchrone Aufgabe, aber in Ihrem Fall ist es nicht, weil Sie aufhören zu laufen Thread auf warten es zu beenden. Wenn Toast auch eine Aufgabe ist, kann das Stoppen des aktuellen Threads dazu führen, dass der Toast nicht angezeigt wird, da er sehr schnell blinken würde. –

Antwort

0

wenn das Netz langsam ist, bedeutet es, dass die Verbindung ist mehr als Timeout Sie setzen, so können Sie nur fügen Sie Ihre Toast-Methode im Fang Block Ihrer DoInBackground Mothod, ich denke, es wird funktionieren!

Verwandte Themen