【问题标题】:Toast message not shown on poor internet speed网速不佳时未显示 Toast 消息
【发布时间】:2017-07-05 10:36:18
【问题描述】:

我遇到了一些奇怪的问题。我在我的应用程序中登录用户,但在此之前我检查互联网连接。为此,我正在祝酒消息说等待我们正在验证您的详细信息。这一切都很好,但是当网络很差时,它不会发送任何消息,并且需要时间来登录。

这是我的代码

   @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 是我的加载视图,用于通知他正在登录应用程序。下面是我的 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 是检查互联网的异步任务。这就是我检查互联网的方式

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

当互联网速度良好时一切正常。当我的设备未连接到互联网时,它会显示互联网消息已关闭。但是当我的网速非常低时,问题就来了。登录需要一些时间,但不显示 toast 消息。请帮忙

【问题讨论】:

  • 连接速度不应停止 toast 显示。你确定它达到了那条线?在此处放置断点或 Log.d 以确保。
  • @billynomates 即使我想知道为什么会这样。我使用了 log 和 Log.d ... Toast 消息行正在执行,但屏幕上没有出现 toast
  • 您自己说过检查连接是一项异步任务,但在您的情况下它不是,因为您停止运行线程以等待它完成。如果 Toast 也是一些任务,那么停止当前线程运行可能意味着您将无法看到 toast 出现,因为它会很快闪烁。
  • @M.Prokhorov 谢谢伙计......我从异步任务中删除了 .get() 并进行了所有必要的更改,现在它工作正常

标签: java android android-toast


【解决方案1】:

当网速慢时,表示连接超过了你设置的超时时间, 所以你可以在你的 doInBackground 方法的 catch 块中添加你的 toast 方法,我认为它会起作用!

【讨论】:

    猜你喜欢
    • 2015-02-12
    • 2011-12-09
    • 2020-07-30
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多