0

我正在做一个简单的try/catch(在PCL项目中)来验证用户与应用程序的连接,但我似乎找不到DisplayAlert()方法用于Xamarin网站的例子。如何在Xamarin中显示错误消息PCL

这里是我的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; 

下面是代码:

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 

      } 

,我应该看或我应该怎么做,以显示消息?

+0

'DisplayAlert'是'Xamarin.Forms'命名空间中'Page'类中的公共方法。获取当前显示的“页面”,然后您可以调用它上面的“DisplayAlert”。 – SushiHangover

回答

0

Application.Current.MainPage.DisplayAlert应该工作

2

你不应该从一个任务做了DisplayAlert。你应该把一个消息转发给调用类,告诉失败,或者只是将异常提交给调用类。对于返回到UI并提出消息的任务是不好的。

此外,您对HttpClient的使用已关闭。 HttpClient旨在用作单例方法。尝试并为每个项目或模块创建一个静态单例。

之所以这么说,试试这个:

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

可以使用Toasts.Forms.Plugin

设置

在iOS,安卓,WinRT中和UWP显示敬酒消息项目请致电:

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

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

如果你正在使用Xamarin Forms,你必须在调用Xamarin.Forms.Init()之后执行此操作。

权限

在iOS中,你必须申请许可首先显示本地通知,因为它是中断操作的用户。

// 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); 
} 

使用

为了使用相关的服务来解决IToastNotificator。

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

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

var result = await notificator.Notify(options); 

返回的结果是带有Action的NotificationResult,其中包含以下值之一。

[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 
} 

如果您想要点击NotificationAction,您必须在NotificationOptions中设置IsClickable = true。

1

它更好地为xamarin添加userdialogs插件。它提供了不同类型的警报,吐司等在UI中显示消息。它也提供了更好的用户界面。

您可以从https://www.nuget.org/packages/Acr.UserDialogs/

安装userdialogs安装后,可以自动显示警告如下: UserDialogs.Instance.Alert( “”, “”, “OK”>);

您还可以显示警报作为吐司。