【问题标题】:Check network connection in fragment检查片段中的网络连接
【发布时间】:2013-05-05 02:00:11
【问题描述】:

我尝试在我的 SherlockFragment 中检查网络连接,但无法识别 getSystemService() 方法。

下面是我的代码(来自http://developer.android.com/training/basics/network-ops/connecting.html

    ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        // fetch data
    } else {
        // display error
    }

提前致谢

【问题讨论】:

    标签: android android-networking


    【解决方案1】:

    fragment上没有定义getSystemService()方法,所以先用getActivity()获取activity,例如:

    ConnectivityManager connMgr = (ConnectivityManager) getActivity()
                                 .getSystemService(Context.CONNECTIVITY_SERVICE);
    
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    
    if (networkInfo != null && networkInfo.isConnected()) {
        // fetch data
    } else {
        // display error
    }
    

    ps附加说明:如果存在片段在未附加到任何活动的情况下运行的潜在风险,请先检查getActivity() 是否返回null .

    干杯!

    【讨论】:

    • 成功了!!非常感谢。
    • 片段附加到一个活动。不附加会有什么风险?
    • 如果未附加,getActivity() 可能会返回null,因此getActivity().getSystemService() 会抛出NullPointerException。但是,这取决于您在何处调用此代码以及如何创建片段。没什么好担心的,只要记住它;)
    • @Trinimon 我得到 getActivity() 为空。如何解决这个问题?在 android 手机 Running andriod 4.0.3 中它工作正常。但在运行 4.4.1 的平板电脑 Nexus 7 中,它返回 null。怎么了。你很高兴吗?
    • 如果getActivity() 返回null,这表明在那个时间点没有附加任何活动。你在onActivityCreated() 或其他地方使用过它吗?您是否单独创建了片段?您还可以尝试将代码移动到片段的 onAttach(Activity activity) 方法 - 在这里您有可用的活动,您根本不需要调用 getActivity()
    【解决方案2】:

    更好的方法是在try-catch中使用网络函数代码。并捕获异常如果网络不可用。如果您使用任何网络检查代码,那么您还需要捕获异常。因为你没有其他方法可以检查它是否成功,意味着在函数之间丢失的网络是否完成。

    【讨论】:

    • 我第一次搜索的方式相同,最后我在这个决定中达到了。我只是和你分享了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多