c# - NavigationStack 的 ScanPage 有问题
问题描述
我在 Xamarin 应用程序中的扫描有问题。只是很难解释。我的应用程序中有 4 个页面。我的扫描通过第 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();
当我扫描我的二维码并调用 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;
抱歉,很难解释,我不是英语,所以我希望有人理解并帮助我。谢谢。
解决方案
推荐阅读
- c++ - 如何将 C/C++ 套接字发送和接收函数封装在一个类中?
- wordpress - 搜索查询中的 ACF 自定义用户字段
- azure-ad-b2c - 在 Azure AD B2C 租户上自动启用 MFA
- python - 计算 20 分钟平均值和最佳 20 分钟平均值
- python-3.x - 使用 fmpeg 从 MP4 文件中仅提取 Y(YUV420p)帧?
- azure-active-directory - Azure Bot 返回的令牌是什么?
- django - post() 方法对 Django 源代码中的 DeletionMixin 有什么作用?
- javascript - cshtml 页面上的 javascript 格式 - Visual Studio 2019
- html - 应用选择器的顺序有什么区别
- git - 创建 docker compose 文件以从 repo 中提取代码