我在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;
很抱歉,这很难解释,我不是英语,所以我希望有人能理解并帮助我。 谢谢。