Xamarin Forms не отлаживает, а ZXing замораживает все приложения - PullRequest
0 голосов
/ 25 января 2019

Я подал заявку на чтение некоторых QR-кодов, используя Zxing на Xamarin. Накануне вчера это работало хорошо, но со вчерашнего дня у меня есть эта проблема:

Я поставил точку останова в методе OnAppearing (), но он игнорируется, хорошо ... Когда я нажимаю кнопку Zxing, чтобы открыть сканер, приложение останавливается, но ничего не отображается, только зависание, никаких ошибок , нет сообщений, нет отладки, ничего. Мой код такой же, как когда он работал, ничего не изменилось. Если кто-нибудь может мне помочь, я буду благодарен.

    public MainPage()
    {
        InitializeComponent();
        this.InitializeComponent();

        this.BindingContext = this;

        this.IsBusy = false;
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        var dados = new AcessoDB();

        if (dados.GetAlunos().Count() > 0)
        {
            var infopage = new Wallet();
            Navigation.InsertPageBefore(infopage, Navigation.NavigationStack[0]);
            await Navigation.PopToRootAsync();
            codeqr.IsEnabled = false;
        }
    }

    private async void Scan_Clicked(object sender, EventArgs e)
    {
        semaphoreSlim.Release();
        string img;
        this.IsBusy = true;


        if (CrossConnectivity.Current.IsConnected)
        {
            var scan = new ZXingScannerPage();
            await Navigation.PushAsync(scan);
            scan.OnScanResult += async (result) =>
            {
                bool liberado = await semaphoreSlim.WaitAsync(-1);
                if (!liberado)
                {
                    return;
                }
                scan.IsScanning = false;
                Device.BeginInvokeOnMainThread(async () =>
                {
                    if (CrossConnectivity.Current.IsConnected)
                    {
                        var parseResult = ResultParser.parseResult(result);

                        if (parseResult != null)
                        {
                            var hash = sha256_hash(result.ToString());
                            Aluno items = new Aluno();
                            try
                            {
                                scan.IsAnalyzing = false;
                                scan.IsScanning = false;
                                items = JsonConvert.DeserializeObject<Aluno>(result.ToString());
                                img = GetImage(items.Foto);
                            }
                            catch (Exception)
                            {
                                scan.IsScanning = false;
                                scan.IsAnalyzing = false;
                                await Navigation.PopAsync();
                                await DisplayAlert("Ops...", "Ocorreu algum erro com a leitura do seu código, tente de novo.", "Ok!");
                                return;
                            }
                            var info = new Aluno
                            {
                                Matricula = items.Matricula,
                                Nome = items.Nome,
                                RG = items.RG,
                                Nascimento = items.Nascimento,
                                Curso = items.Curso,
                                Campus = items.Campus,
                                Periodos = items.Periodos,
                                Modalidade = items.Modalidade,
                                Validade = items.Validade,
                                Hash = hash,
                                Foto = img
                            };

                            var infopage = new Wallet();
                            var dados = new AcessoDB();

                            if (!await dados.InserirAlunoAsync(info))
                            {
                                scan.IsAnalyzing = false;
                                scan.IsScanning = false;
                                await Navigation.PopAsync();
                                await DisplayAlert("Ops...", "Esse código não consta no nosso banco de dados, tem certeza que estuda no UGB?", "Repetir");
                                return;
                            }

                            try
                            {
                                scan.IsScanning = false;
                                scan.IsAnalyzing = false;
                                infopage.BindingContext = info;
                                Navigation.InsertPageBefore(infopage, Navigation.NavigationStack[0]);
                                await Navigation.PopToRootAsync();
                            }
                            catch (Exception)
                            {
                                scan.IsScanning = false;
                                scan.IsAnalyzing = false;
                                await DisplayAlert("Erro", "Não foi possível carregar a sua carteirinha.", "Ok...");
                            }
                        }
                    }
                });
            };
        }
        else
        {
            await DisplayAlert("Ops...", "Você não está conectado à internet.", "Ok!");
        }
        this.IsBusy = false;
    }

    public string GetImage(string foto)
    {
        if (String.IsNullOrEmpty(foto))
        {
            return "";
        }

        using (var WebClient = new WebClient())
        {
            var imageBytes = WebClient.DownloadData("http://portal.ugb.edu.br/upload/ImagemAluno/" + foto);
            var sxtyfr = Convert.ToBase64String(imageBytes);
            //var img = "data:image/jpg;base64," + sxtyfr;
            return sxtyfr;
        }
    }

    public static string sha256_hash(string value)
    {

        StringBuilder Sb = new StringBuilder(); using (SHA256 hash = SHA256Managed.Create())
        {

            Encoding enc = Encoding.UTF8;

            Byte[] result = hash.ComputeHash(enc.GetBytes(value)); foreach (Byte b in result)

                Sb.Append(b.ToString("x2"));

        }
        return Sb.ToString();

    }
}

}

1 Ответ

0 голосов
/ 29 марта 2019

Я решаю свою проблему ... Я просто очищаю, собираю и перестраиваю решение, и тогда происходит волшебство. Спасибо всем за помощь.

...