Xamarin MVVMCross ZXing后退按钮
使用zxing条形码扫描仪时,MVVMCross中的“后退”按钮出现问题。不幸的是,当我按下“上一步”按钮时,出现了一个错误:Java.Lang.NullPointerException:尝试对空对象引用调用虚拟方法“long android.graphics.Paint.getNativeInstance()” 当我评论我时,一切都好。 有人知道怎么回事吗 这是我的片段扫描视图类:Xamarin MVVMCross ZXing后退按钮,xamarin,xamarin.android,mvvmcross,zxing,Xamarin,Xamarin.android,Mvvmcross,Zxing,使用zxing条形码扫描仪时,MVVMCross中的“后退”按钮出现问题。不幸的是,当我按下“上一步”按钮时,出现了一个错误:Java.Lang.NullPointerException:尝试对空对象引用调用虚拟方法“long android.graphics.Paint.getNativeInstance()” 当我评论我时,一切都好。 有人知道怎么回事吗 这是我的片段扫描视图类: public class ScannView : MvxFragmentActivity, IBarcod
public class ScannView : MvxFragmentActivity, IBarcodeFragmentOptions
{
protected ScannViewModel MainViewModel
{
get { return ViewModel as ScannViewModel; }
}
public static ZXingScannerFragment scanFragment;
protected override void OnResume()
{
base.OnResume();
try
{
if (scanFragment == null)
{
scanFragment = new ZXingScannerFragment();
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.frameScanner, scanFragment)
.Commit();
}
scan();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
protected override void OnPause()
{
try
{
scanFragment?.StopScanning();
base.OnPause();
}catch(Exception ex)
{
Console.WriteLine(ex);
}
}
protected override void OnRestart()
{
base.OnRestart();
}
public void ToogleFlashLight(bool on)
{
if (scanFragment != null)
scanFragment.SetTorch(on);
}
public void scan()
{
try
{
// var results = await CrossPermissions.Current.RequestPermissionsAsync(Plugin.Permissions.Abstractions.Permission.Camera);
// var status = results[Plugin.Permissions.Abstractions.Permission.Camera];
// if (status == Plugin.Permissions.Abstractions.PermissionStatus.Granted)
// {
var opts = new MobileBarcodeScanningOptions
{
PossibleFormats = new List<ZXing.BarcodeFormat> {
ZXing.BarcodeFormat.QR_CODE
},
CameraResolutionSelector = availableResolutions => {
foreach (var ar in availableResolutions)
{
Console.WriteLine("Resolution: " + ar.Width + "x" + ar.Height);
}
return null;
}
};
scanFragment?.StartScanning(opts,result =>
{
if (result == null || string.IsNullOrEmpty(result.Text))
{
RunOnUiThread(() => Toast.MakeText(this, "Anulowanie skanowanie", ToastLength.Long).Show());
return;
}
MainViewModel.ScannedCode = result.Text; //ChangePropertyToEmpty();
RunOnUiThread(() => Toast.MakeText(this, "Zeskanowano: " + result.Text, ToastLength.Short).Show());
});
// }
}catch(Exception ex)
{
Debug.WriteLine(ex);
}
}
protected override void OnViewModelSet()
{
MobileBarcodeScanner.Initialize(Application);
base.OnViewModelSet();
SetContentView(Resource.Layout.layout_scann);
}
}
在调用
Close()
@Cheesebaron时,听起来很像您没有正确关闭扫描仪。我已尝试在Close()之前调用scannerFragment.StopScanning(),但没有任何更改。问题也是当我按下“电话后退”按钮时。另外,我正在停止OnPause()中的扫描,但此方法之后会出现错误。@straiser您解决了此问题吗?调用Close()
@Cheesebaron时,听起来很像您没有正确关闭扫描仪。我尝试在Close()之前调用scannerFragment.stopscan(),但没有任何更改。问题也是当我按下“电话后退”按钮时。另外,我正在停止OnPause()中的扫描,但错误发生在这个方法之后。@straiser您解决了这个问题吗?
public void ButtonBackClick()
{
Close(this);
}