NavigationStack的ScanPage有问题

时间:2018-11-12 14:45:09

标签: c# xamarin stack qr-code

我在Xamarin应用程序中的扫描存在问题。很难解释。我的应用程序中有4个页面。 “我的扫描”通过第4页的按钮打开。第一次使用扫描仪时,我没有问题。只要停留在第四页上,我就没有问题,我可以做很多扫描而没有任何错误。但是,当我在应用程序中使用“返回”按钮时,我进入了第3页,返回到第4页并使用了扫描后,出现了错误。

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

此刻,我的navigationStack等于0。

我的方法GoBack可以做到:

  

Navigation.PopAsync();

当我扫描QRCode并调用SendPresenceAck()时出现扫描仪错误

private async Task SendPresenceAck(string paramA09) //, int? idPrestation)
    {

        int idParticipant;
        if (!int.TryParse(paramA09, out idParticipant))
        {
            //await this.ShowAlert("Attention", "Problème de lecture du QR Code.");
            await this.DisplayAlert("Attention", "Problème de lecture du QR Code.", "Cancel");

            return;
        }

        // On appelle le WS pour signifier la présence
        // On passe par validateService
        // On prépare la validation de la présence
        var validateService = new ValidatePresenceService(this.Token);

        // On ajoute la ligne à valider
        var validate = validateService.AddNewPresence(idParticipant, this.idPrestation, true);

        // On déclenche l'envoi au WS (si besoin)
        if (validate != null)
        {
            // On envoie uniquement en cas de connexion
            if (!Global.GetSettingsBool(TypeSettings.IsHorsConnexion))
            {
                //await validateService.SendAll();
                // Attention : si participant déjà enregistré : erreur 403
                try
                {
                    await validateService.Send(validate);
                    // await this.DisplayAlert("OK", "Le billet est validé.", "OK");
                    popupLoginView.IsVisible = true;
                    //Gestion du premier stack et du bouton
                    StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                    ImageBack.BackgroundColor = Color.White;
                    //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                    button.BackgroundColor = Color.FromHex("#DD5500");
                    button.Text = "Blabla";
                    //BoxSEmpty.Clicked += boutonSortir;
                    button.Clicked += async (sender, e) =>
                    {
                        // Ouverture du scan
                        await BtnScanClicked(sender, e);



                    };
                    //Gestion à partir du deuxième stack
                    StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                    LbldAlert.BackgroundColor = Color.FromHex("#641914");
                    LbldAlert.Text = "ALERTE";
                    LblSEnd.BackgroundColor = Color.FromHex("#641914");
                    LblSEnd.Text = "Blabla";
                    // 401 : impossible d'identifier le numéro du billet
                    //  await this.DisplayAlert("Attention", "Impossible d'identifier le numéro du billet, veuillez vérifier les informations de celui ci.", "Cancel");
                    //   return;



                }
                catch (WebException ex)
                {
                    HttpWebResponse objresponse = ex.Response as HttpWebResponse;
                    if (objresponse.StatusCode == HttpStatusCode.Forbidden)
                    {
                        popupLoginView.IsVisible = true;
                        //Gestion du premier stack et du bouton
                        StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                        ImageBack.BackgroundColor = Color.White;
                        //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                        button.BackgroundColor = Color.FromHex("#DD5500");
                        button.Text = "Blabla";
                        //BoxSEmpty.Clicked += boutonSortir;
                        button.Clicked += async (sender, e) =>
                        {
                            // Ouverture du scan
                            await BtnScanClicked(sender, e);



                        };
                        //Gestion à partir du deuxième stack
                        StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                        LbldAlert.BackgroundColor = Color.FromHex("#641914");
                        LbldAlert.Text = "ALERTE";
                        LblSEnd.BackgroundColor = Color.FromHex("#641914");
                        LblSEnd.Text = "Blabla";
                        // 403 : le participant a déjà été enregistré aujourd'hui
                        // Message d'erreur
                        // await this.DisplayAlert("Attention", "Le billet a déjà été enregistré, le numéro du billet a déjà été scanné auparavant.", "OK");
                        // return;

                    }
                    else if (objresponse.StatusCode == HttpStatusCode.NotFound)
                    {
                        popupLoginView.IsVisible = true;
                        //Gestion du premier stack et du bouton
                        StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                        ImageBack.BackgroundColor = Color.White;
                        //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                        button.BackgroundColor = Color.FromHex("#DD5500");
                        button.Text = "Blabla";
                        //BoxSEmpty.Clicked += boutonSortir;
                        button.Clicked += async (sender, e) =>
                        {


                            // Ouverture du scan
                            await BtnScanClicked(sender, e);



                        };
                        //Gestion à partir du deuxième stack
                        StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                        LbldAlert.BackgroundColor = Color.FromHex("#641914");
                        LbldAlert.Text = "ALERTE";
                        LblSEnd.BackgroundColor = Color.FromHex("#641914");
                        LblSEnd.Text = "Blabla";
                        // 404 : billet non valide

                        // await this.DisplayAlert("Attention", "Le billet n'est pas valide.", "Cancel");

                        //return;
                    }
                    else if (objresponse.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        popupLoginView.IsVisible = true;
                        //Gestion du premier stack et du bouton
                        StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                        ImageBack.BackgroundColor = Color.White;
                        //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                        button.BackgroundColor = Color.FromHex("#DD5500");
                        button.Text = "Blabla";
                        //BoxSEmpty.Clicked += boutonSortir;
                        button.Clicked += async (sender, e) =>
                        {
                            // Ouverture du scan
                            await BtnScanClicked(sender, e);



                        };
                        //Gestion à partir du deuxième stack
                        StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                        LbldAlert.BackgroundColor = Color.FromHex("#641914");
                        LbldAlert.Text = "ALERTE";
                        LblSEnd.BackgroundColor = Color.FromHex("#641914");
                        LblSEnd.Text = "Blabla";
                        // 401 : impossible d'identifier le numéro du billet
                        //  await this.DisplayAlert("Attention", "Impossible d'identifier le numéro du billet, veuillez vérifier les informations de celui ci.", "Cancel");
                        //   return;

                    }
                }
                catch (Exception e)
                {
                    // Erreur
                    await this.DisplayAlert("Attention", e.Message, "Cancel");
                    return;
                }
            }
            else
            {
                // Hors connexion : on vérifie juste si l'utilisateur n'est pas déjà présent dans la table SQL

                // Attention : si pas de prestation : on a le droit d'enregistrer plusieurs fois la présence
                // Si il y a une prestation, en revanche, on doit vérifier qu'il n'est pas déjà inscrit

                if (validate.IdPrestation.HasValue &&
                    validateService.IsInscriptionAlreadyRecorded(validate))
                {
                    popupLoginView.IsVisible = true;

                    //Gestion du premier stack et du bouton
                    StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                    ImageBack.BackgroundColor = Color.White;
                    //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                    button.BackgroundColor = Color.FromHex("#DD5500");
                    button.Text = "Blabla";
                    //BoxSEmpty.Clicked += boutonSortir;
                    button.Clicked += async (sender, e) =>
                    {


                        // Ouverture du scan
                        await BtnScanClicked(sender, e);



                    };
                    //Gestion à partir du deuxième stack
                    StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                    LbldAlert.BackgroundColor = Color.FromHex("#641914");
                    LbldAlert.Text = "ALERTE";
                    LblSEnd.BackgroundColor = Color.FromHex("#641914");
                    LblSEnd.Text = "Blabla";

                    // Déjà trouvé : message d'erreur
                    // await this.DisplayAlert("Attention", "Le participant a déjà été enregistré.", "OK");
                    //
                    // return;


                }

            }
        }
        else
        {
            // Pb à l'insertion des données ??

        }


        return;


    }

例外在行:

popupLoginView.IsVisible = true;

很抱歉,这很难解释,我不是英语,所以我希望有人能理解并帮助我。 谢谢。

0 个答案:

没有答案