Я использую библиотеку fanatisc для сканирования, но у меня возникла новая проблема. После того, как я установил свою последнюю переменную, у меня не получается, почему. Я думаю, что это может иметь какое-то отношение к потокам в связи с тем, что его сбой
private async void BtnTestScan_Clicked(object sender, EventArgs e)
{
var scanPage = new ZXingScannerPage();
scanPage.ToggleTorch();
scanPage.IsScanning = true;
// Navigate to our scanner page
await Navigation.PushAsync(scanPage);
scanPage.OnScanResult += (result) =>
{
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(async () =>
{
BomComponentData getInfo = new BomComponentData();
await Navigation.PopAsync();
if (isBomScan.IsToggled == false)
{
getInfo = await database.GetProductInfoByBarCode(result.Text);
lblOpertationName.Text = "Operation Name: " + getInfo.OperationName;
//var popup1 = new FuelStockApp.Views.PopupInputBox("You scanned the item " + getInfo.Name + "You need to pick " + getInfo.Quantity.ToString(), Convert.ToInt16(getInfo.Quantity));
BarCode = result.Text;
//await Rg.Plugins.Popup.Services.PopupNavigation.Instance.PushAsync(popup1);
Int32.TryParse(txtQtyUpdate.Text, out int Qty);
lblQty.Text = Qty.ToString();
gridItems.IsVisible = false;
txtCode.Text = BomId;
lblOpertationName.Text = "Operation Name: " + getInfo.OperationName;
lblBinLocation.Text = "Bin Location : " + getInfo.BinLocation.ToString();
lblBinLocationLabel.Text = "Bin Name : " + getInfo.BinName.ToString();
QtyToDeduct = Qty;
}
}
Я думаю, что библиотека может вызывать BeginInvoiteOnMainThread.
Я правильно настроил в соответствии с документацией со следующим в моем mainactivy.cs
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
Rg.Plugins.Popup.Popup.Init(this,savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
global::ZXing.Net.Mobile.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
Сбой сразу после того, как закончилось мое появившееся событие. Там все просто стандартные вещи.
protected async override void OnAppearing()
{
base.OnAppearing();
await database.copydb();
List<BomComponentData> _boms = new List<BomComponentData>();
_boms = await database.GetBomsAsync(BomId);
viewModel.Boms = _boms.ToObservableCollection();
viewModel.LoadItemsCommand.Execute(null);
warehouses.RemoveAll (x => x.WarehouseID > 0);
PickerItems.Clear();
PickerItemList.Clear();
warehouses = await database.GetWarehousesFromSage();
if (warehouses.Count > 0)
{
viewModel.Warehouses = warehouses.ToObservableCollection();
foreach (var warehouse in warehouses)
{
if (warehouse.Description == "")
warehouse.Description = warehouse.Name;
PickerItems.Add(warehouse.WarehouseID.ToString(), warehouse.Description);
}
pickWarehouse.ItemsSource = PickerItemList;
}
}
Необработанное исключение:
System.NullReferenceException: ссылка на объект не установлена для экземпляра> объекта.
Это все, что я получаю, я не получаю никакой дополнительной информации об ошибке.
Редактировать 2
Я обнаружил, что исключение происходит здесь, в моей паре значений ключей, а не zxing. Так что я изменил название, кажется, здесь.
private async void PickWarehouse_SelectedIndexChanged(object sender, EventArgs e)
{
btnTestScan.IsVisible = true;
gridItems.IsVisible = true;
txtCode.IsVisible = true;
KeyValuePair<string, string> selectedEntry= (KeyValuePair<string, string>)pickWarehouse.SelectedItem;
List<BomComponentData> _boms = new List<BomComponentData>();
WarehouseId = long.Parse(selectedEntry.Key);
_boms = await database.GetBomsAsync(txtCode.Text);
viewModel.Boms = _boms.ToObservableCollection();
gridItems.ItemsSource = _boms;
}
На этой строке в частности
KeyValuePair<string, string> selectedEntry= (KeyValuePair<string, string>)pickWarehouse.SelectedItem;