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