You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android Fragment中networkInfo.IsConnected空引用异常求助

解决Xamarin Android Fragment中网络检测的NullReferenceException问题

Hey there, let's break down this issue and fix it together!

错误原因解释

你碰到的System.NullReferenceException: Object reference not set to an instance of an object.,说白了就是你在尝试调用一个还没初始化(为null)的对象的属性或方法。

回到你的代码里,问题出在networkInfo.IsConnected这一行:当设备当前没有任何活跃的网络连接时,connMgr.ActiveNetworkInfo会直接返回null,这时候你直接去访问networkInfo.IsConnected,自然就触发了空引用异常。

解决办法

1. 先判空再访问属性

修改你的代码逻辑,先检查networkInfo是否为null,再判断连接状态,避免直接访问null对象:

ConnectivityManager connMgr = (ConnectivityManager)this.Activity.GetSystemService(Android.Content.Context.ConnectivityService);
NetworkInfo networkInfo = connMgr.ActiveNetworkInfo;
// 先确认networkInfo不为null,再访问IsConnected属性
bool isConnected = networkInfo != null && networkInfo.IsConnected;

这样即使设备没有网络,代码也不会抛出异常,isConnected会被正确设置为false。

2. 确保添加必要权限

别忘了在你的AndroidManifest.xml文件中添加访问网络状态的权限,否则ConnectivityManager可能无法正常获取网络信息,也会间接导致networkInfo为null:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3. 适配高版本Android(可选)

如果你的应用目标是Android 10(API 29)及以上,官方更推荐使用ConnectivityManager.NetworkCallback来监听网络状态变化,这种方式比直接获取ActiveNetworkInfo更可靠。简单示例如下:

private ConnectivityManager.NetworkCallback _networkCallback;

public override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    var connMgr = (ConnectivityManager)Activity.GetSystemService(Context.ConnectivityService);
    _networkCallback = new ConnectivityManager.NetworkCallback();
    _networkCallback.OnAvailable += (sender, args) =>
    {
        // 网络连接可用时的逻辑,注意切换到UI线程更新界面
        Activity.RunOnUiThread(() => { /* 这里写你的UI更新或业务逻辑 */ });
    };
    _networkCallback.OnLost += (sender, args) =>
    {
        // 网络断开时的逻辑
        Activity.RunOnUiThread(() => { /* 这里写你的UI更新或业务逻辑 */ });
    };
    connMgr.RegisterDefaultNetworkCallback(_networkCallback);
}

public override void OnDestroy()
{
    base.OnDestroy();
    var connMgr = (ConnectivityManager)Activity.GetSystemService(Context.ConnectivityService);
    // 记得销毁时取消注册,避免内存泄漏
    connMgr.UnregisterNetworkCallback(_networkCallback);
}

内容的提问来源于stack exchange,提问作者user9317843

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:51:04