0

Je fais un simple try/catch (dans un projet PCL) pour valider la connexion des utilisateurs à l'application, mais je n'arrive pas à trouver la méthode DisplayAlert() utilisée dans le Exemple de sites web Xamarin.Comment afficher un message d'erreur dans Xamarin PCL

Voici mes usings:

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Input; 
using System.Security; 
using System.Diagnostics; 

Voici le code:

public async Task Connexion() 
     { 
      // on met en place un try catch pour déceler toute erreur dans la procédure de connexion 
      try 
      { 
       // url de récupération du json de l'acteur 
       string urlActeur = "http://10.0.0.5/ppe3JoJuAd/gsbAppliFraisV2/webservices/w_visiteur.php" + "?" + "login=" + Login + "&" + "pass=" + Pass; 

       //instanciation du client http qui envoi un header json 
       HttpClient clientActeur = new HttpClient(); 
       clientActeur.DefaultRequestHeaders.Accept.Clear(); 
       clientActeur.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

       //réponse à la requête Http 
       var response = await clientActeur.GetAsync(urlActeur); 
       var json = response.Content.ReadAsStringAsync().Result; 
       var acteurJson = JsonConvert.DeserializeObject<ActeurJson>(json); 

       //on vérifie les informations de connexion du user (ici cela se ait avec oldMdp car pas d'implémentation du SHA1 actuellement en Xamarin, auquel cas nous auions converti le contenu du champ pass en sha1 puis vérification avec le champ mdp de l'acteur) 
       if (acteurJson.Acteur.login == login && acteurJson.Acteur.mdp == acteurJson.Acteur.oldMdp) 

        App.Current.MainPage = new VisitePage(); 
      } 
      catch 
      { 
       await DisplayAlert()//intelisense does not find the using or the required dll 

      } 

où dois-je regarder ou que dois-je faire pour afficher le message?

+0

'DisplayAlert' est une méthode publique dans la classe' Page' de l'espace de noms 'Xamarin.Forms'. Obtenez le 'Page' actuellement affiché et ensuite vous pouvez appeler' DisplayAlert' dessus. – SushiHangover

Répondre

0

Application.Current.MainPage.DisplayAlert devrait fonctionner

2

Vous ne devriez pas faire un affichAlerte d'une tâche. Vous devriez relayer un message à la classe appelante à propos d'un échec ou simplement élever l'exception à la classe appelante. Pour qu'une tâche revienne dans l'interface utilisateur et déclenche un message, c'est mal.

Votre utilisation de HttpClient est également désactivée. HttpClient est destiné à être utilisé comme une méthode singleton. Essayez de créer un par projet ou modules en tant que singleton statique.

Tout cela étant dit, essayez ceci:

public class ConnexionHelper 
{ 
    public async Task Connexion() 
    { 
     try 
     { 
      System.Diagnostics.Debug.WriteLine("trying stuff"); 
     } 
     catch(Exception ex) 
     { 
      Xamarin.Forms.Page ourPage = App.Current.MainPage.Navigation.NavigationStack.LastOrDefault(); 
      if (ourPage != null) 
      { 
       await ourPage.DisplayAlert("eeek", "error has occurrred", "not ok"); 
      } 
     } 
    } 
0

Vous pouvez afficher un message de pain grillé à l'aide Toasts.Forms.Plugin

Configuration

Dans votre iOS, Android, WinRT et UWP projets s'il vous plaît appelez:

DependencyService.Register<ToastNotification>(); // Register your dependency 
ToastNotification.Init(); 

// If you are using Android you must pass through the activity 
ToastNotification.Init(this); 

Si vous utilisez Xamarin Forms, vous devez le faire APRES votre appel à Xamarin.Forms.Init();

Permission

Dans iOS, vous devez demander la permission de montrer les notifications locales d'abord, car il est un utilisateur d'interrompre l'action.

// Request Permissions 
if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0)) 
{ 
    // Request Permissions 
    UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (granted, error) => 
    { 
     // Do something if needed 
    }); 
} 
else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
{ 
    var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null); 

    app.RegisterUserNotificationSettings(notificationSettings); 
} 

Utilisation

Utiliser le service de dépendance afin de résoudre IToastNotificator.

var notificator = DependencyService.Get<IToastNotificator>(); 

var options = new NotificationOptions() 
      { 
       Title = "Title", 
       Description = "Description" 
      }; 

var result = await notificator.Notify(options); 

Le résultat renvoyé est un NotificationResult avec une action à l'intérieur de l'une des valeurs suivantes.

[Flags] 
public enum NotificationAction 
{ 
    Timeout = 1, // Hides by itself 
    Clicked = 2, // User clicked on notification 
    Dismissed = 4, // User manually dismissed notification 
    ApplicationHidden = 8, // Application went to background 
    Failed = 16 // When failed to display the toast 
} 

Si vous voulez que le cliquée NotificationAction vous devez définir IsClickable = true dans les NotificationOptions.

1

Il est préférable d'ajouter le plugin userdialogs pour xamarin. Il arrive avec différents types d'alertes, toasts, etc pour afficher des messages dans l'interface utilisateur. En outre, il donne une meilleure interface utilisateur.

Vous pouvez installer les userdialogs de https://www.nuget.org/packages/Acr.UserDialogs/

Après l'installation, vous pouvez afficher l'alerte comme suit: UserDialogs.Instance.Alert ("", "", "OK">);

Vous pouvez également afficher l'alerte sous forme de toasts.