2017-12-07 17 views
1

私はメッセージングセンターにthisの記事を読んでいました。私はデータストアクラスでエラーが発生したときにエラーを表示するためにこのメソッドを使用したかったのです(これは正直ではない場合は教えてください)。しかし、それは動作していません。Xamarinフォームのエラー処理 - メッセージセンターアラートがデータストアから表示されない

ログインPage.xaml.cs

public partial class LoginPage : ContentPage 
{ 
    public LoginPage() 
    { 
     InitializeComponent(); 

     MessagingCenter.Subscribe<LoginDataStore, MessagingCenterAlert>(this, "message", (sender, arg) => 
     { 
      Device.BeginInvokeOnMainThread(() => 
      { 
       DisplayAlert("UH OH!", arg.Message, "OK"); 
      }); 
     }); 
    } 
} 

LoginDataStore.cs

public class LoginDataStore 
{ 
    HttpClient client; 

    public LoginDataStore() 
    { 
     client = new HttpClient(); 
     client.BaseAddress = new Uri($"{App.BackendUrl}/"); 
    } 

    public async void Login(string username, string password) 
    { 
     var content = new FormUrlEncodedContent(new[] 
     { 
      new KeyValuePair<string, string>("grant_type", "password"), 
      new KeyValuePair<string, string>("email", username), 
      new KeyValuePair<string, string>("password", password) 
     }); 

     try 
     { 
      var result = await client.PostAsync("/oauth/token", content); 

      string resultContent = await result.Content.ReadAsStringAsync(); 

      if (!result.IsSuccessStatusCode) 
       throw new Exception(result.StatusCode.ToString() + System.Environment.NewLine + "Please check your email and password."); 

      dynamic resultObject = JsonConvert.DeserializeObject(resultContent); 

      Settings.AuthToken = (string)resultObject["access_token"].Value; 

      Settings.UserId = username; 
     } 
     catch (Exception e) 
     { 
      // remove later when the messaging center works 
      await Application.Current.MainPage.DisplayAlert("Login Failed!", e.Message, "OK"); 

      MessagingCenter.Send(new MessagingCenterAlert 
      { 
       Title = "Login Failed", 
       Message = e.Message, 
       Cancel = "OK" 
      }, e.Message); 

      return; 
     } 
    } 
} 

私は、コードを実行すると、ブレークポイントで、私はメッセージを作成なっていることがわかりますログインページは登録されていますが、サブスクリプション内のコードは呼び出されず、メッセージは表示されません。ページを直接呼び出すことのブルートフォースコードは機能しますが、それはまさにエレガントではありません。

答えて

2

サブスクライバは、送信者が送信している同じmessage鍵をリッスンしていません。一致する必要があります:

+0

ありがとうございます!私はそれを見ることができませんでした! –

関連する問題