4

在我的应用程序中完全依赖于网络,即,我从网络获取数据(带文本的图像)并仅显示在我的布局中。为此,我的主要问题是如何处理网络连接。我使用以下代码检查设备是否已连接到网络。

    public static boolean hasConnection() {
    ConnectivityManager cm = (ConnectivityManager) MbridgeApp.getContext().getSystemService(
        Context.CONNECTIVITY_SERVICE);

    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null && wifiNetwork.isConnected()) {
      return true;
    }

    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (mobileNetwork != null && mobileNetwork.isConnected()) {
      return true;
    }

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
      return true;
    }

    return false;
  }
  1. 这段代码提供了有关设备是否连接到网络的信息。
  2. 我的问题会出现,有时网络连接但信号强度太低,这种情况我的应用程序需要更多时间(从API获取数据),长时间后应用程序冻结或崩溃。
  3. 是否可以设置信号强度的最小范围,如果它低于该范围,我只是将 toast 消息通知给用户。
4

1 回答 1

1

您可以为 http 调用设置超时,同时在单独的线程上使用它们,并在加载用户友好的 ui 时显示一些进度。

编辑

您可以使用 AsyncTask 获取数据,并且无需检查连接,因为如果设备未连接,AsyncTask 将立即完成。

final ServerHit serverHit = new ServerHit(this);
serverHit.execute(url);
// set a timeout
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (serverHit.getStatus() == AsyncTask.Status.RUNNING)
                    serverHit.cancel(true);
            }
        }, timeout);
于 2013-10-29T11:49:50.720 回答