私は奇妙な問題に直面しています。私は自分のアプリでユーザーにサインインしていますが、その前にインターネット接続を確認しています。私はあなたの詳細を確認している間、待っているメッセージをトーストしています。このすべてが正常に動作しますが、ネットワークが悪い場合、それはどんなメッセージをトーストしないと、それは、サインインに時間がかかる。貧弱なインターネット速度でトーストメッセージが表示されない
は、これは私のコードです
@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;
}
}
インターネットがスピードが良いとすべてうまく動作します。私のデバイスがインターネットに接続されていないときは、インターネットのメッセージが表示されています。しかし、私のインターネット速度が非常に低いときに問題が発生します。ログインには時間がかかりますが、トーストメッセージは表示されません。お手伝いください
接続速度はトーストの表示を止めてはなりません。あなたはそのラインに当たると確信していますか?ブレークポイントまたはLog.dを入れて確認してください。 –
@billynomatesでも、なぜこれが起こっているのだろうかと思っています。私はログとLog.dを使用しました...トーストメッセージ行が実行されていますが、画面上にトーストが表示されません – FaisalAhmed
あなたは接続をチェックすることは非同期タスクですが、あなたの場合はそうではありません。それは終わる。トーストがいくつかのタスクでもある場合、現在のスレッドの実行を停止すると、非常に速く点滅するトーストが表示されないことがあります。 –