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

加载ZXing.Net.Mobile.Forms时遭遇NullReferenceException求助

解决Xamarin中ZXing.Net.Mobile.Forms未初始化导致的NullReferenceException

嘿,这个问题我太熟悉了——ZXing.Net.Mobile.Forms虽然是Xamarin开发二维码扫描的首选工具,但它必须完成平台初始化才能正常工作,哪怕你还没写任何扫描相关的业务代码,否则启动时就会触发NullReferenceException。下面是一步步的解决方案:

1. 共享项目(或.NET Standard项目)的全局初始化

在你的App.xaml.cs的OnStart(或者OnLaunching,取决于项目模板)方法中添加初始化代码:

protected override void OnStart()
{
    // 初始化ZXing扫描组件
    ZXing.Net.Mobile.Forms.ZXingScannerView.Initialize();
    // 也可以传入配置选项,比如默认的扫描设置
    // var scannerOptions = new ZXing.Mobile.MobileBarcodeScannerOptions();
    // ZXing.Net.Mobile.Forms.ZXingScannerView.Initialize(scannerOptions);
}

2. Android平台的特定初始化

打开Android项目的MainActivity.cs:

  • 在OnCreate方法中,LoadApplication(new App())之前添加平台初始化代码:
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    // 初始化ZXing Android平台
    ZXing.Net.Mobile.Forms.Android.Platform.Init();
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    LoadApplication(new App());
}
  • 重写权限请求回调方法(相机权限是扫描必需的):
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    ZXing.Net.Mobile.Forms.Android.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

3. iOS平台的特定初始化

打开iOS项目的AppDelegate.cs:

  • 在FinishedLaunching方法中,LoadApplication(new App())之前添加平台初始化代码:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    // 初始化ZXing iOS平台
    ZXing.Net.Mobile.Forms.iOS.Platform.Init();
    global::Xamarin.Forms.Forms.Init();
    LoadApplication(new App());
    return base.FinishedLaunching(app, options);
}
  • 别忘了在Info.plist中添加相机权限描述(iOS强制要求),否则会因权限不足崩溃:
<key>NSCameraUsageDescription</key>
<string>需要访问相机来扫描二维码</string>

为什么会出现这个问题?

ZXing.Net.Mobile.Forms的底层组件依赖于平台特定的原生库和权限配置,即使你还没在界面上添加ZXingScannerView,包内部的一些初始化逻辑也会在应用启动时触发,如果缺少平台初始化步骤,就会导致内部引用为空,从而抛出NullReferenceException。

按照上面的步骤完成初始化后,再运行应用应该就能正常启动了。

内容的提问来源于stack exchange,提问作者That Snowing Summer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:18