Mon application Android Xamarin utilise un service Web auquel elle se connecte via HttpClient. Sur aucune connexion (par exemple lorsque l'utilisateur n'a pas de connexion cellulaire ou WiFi), une exception est levée. J'utilise async/await pour obtenir les données du serveur. Voici un extrait de mon code:Afficher AlertDialog sur l'exception HttpClient (Xamarin Android)
public async Task<String> doLogin(string username, string password)
{
String url = Constants.loginEndpoint + username + "/" + password + "/";
var uri = new Uri(string.Format(url, string.Empty));
return_string = "";
try
{
var response = await GetAsync(uri);
if (response.IsSuccessStatusCode)
{
return_string = "success";
// Process the positive response here
else
{ }
}
catch (Exception ex)
{
throw new ConnectionException();
}
return return_string;
}
I défini un ConnectionException de custon et que vous voulez montrer un AlertDialog à l'utilisateur de les informer, que la demande a échoué en raison de pas de connexion. Après que l'utilisateur clique sur OK, je souhaite fermer l'application. J'ai essayé de montrer la boîte de dialogue d'alerte de la manière suivante, mais ça ne marche pas:
public class ConnectionException : Exception
{
public ConnectionException()
{
AlertDialog.Builder alert = new AlertDialog.Builder(myApp.Context);
alert.SetTitle("Failure");
alert.SetMessage("Request failed. No connection.");
alert.SetPositiveButton("OK", (senderAlert, args) =>
{
});
Dialog dialog = alert.Create();
dialog.Show();
}
public ConnectionException(string message)
: base(message)
{ }
public ConnectionException(string message, Exception innerException)
: base(message, innerException)
{ }
}
Est-ce la bonne approche? Probablement pas, car ça ne marche pas. J'apprécierais toute aide sur la façon d'y parvenir. De plus, je n'y ai pas trop réfléchi, mais est-ce une façon privilégiée de gérer de telles exceptions?
l'objet d'exception lui-même ne devrait pas être responsable de l'affichage d'un message. Vous essayez également (éventuellement) d'afficher une alerte d'interface utilisateur sur un thread d'arrière-plan. – Jason