2017-07-05 15 views
-1

私は奇妙な問題に直面しています。私は自分のアプリでユーザーにサインインしていますが、その前にインターネット接続を確認しています。私はあなたの詳細を確認している間、待っているメッセージをトーストしています。このすべてが正常に動作しますが、ネットワークが悪い場合、それはどんなメッセージをトーストしないと、それは、サインインに時間がかかる。貧弱なインターネット速度でトーストメッセージが表示されない

は、これは私のコードです

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

オーバーレイは、彼が署名したことを通知するために私のロード図でありますアプリ。以下は、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はインターネットをチェックするasyntaskです。これは私がインターネットをチェックする方法です。

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

インターネットがスピードが良いとすべてうまく動作します。私のデバイスがインターネットに接続されていないときは、インターネットのメッセージが表示されています。しかし、私のインターネット速度が非常に低いときに問題が発生します。ログインには時間がかかりますが、トーストメッセージは表示されません。お手伝いください

+0

接続速度はトーストの表示を止めてはなりません。あなたはそのラインに当たると確信していますか?ブレークポイントまたはLog.dを入れて確認してください。 –

+0

@billynomatesでも、なぜこれが起こっているのだろうかと思っています。私はログとLog.dを使用しました...トーストメッセージ行が実行されていますが、画面上にトーストが表示されません – FaisalAhmed

+1

あなたは接続をチェックすることは非同期タスクですが、あなたの場合はそうではありません。それは終わる。トーストがいくつかのタスクでもある場合、現在のスレッドの実行を停止すると、非常に速く点滅するトーストが表示されないことがあります。 –

答えて

0

ネットが遅い場合は、接続がタイムアウトを超えて設定されていることを意味します。 doInBackgroundメソッドのキャッチブロックにトーストメソッドを追加することができます。

関連する問題