私は基本的なアンドロイドアプリを作ろうとしていますが、WebException
をキャッチできません。私が接続しようとしているサーバーがオンになっていると、すべて正常に動作しますが、サーバーをオフにすると、私のアンドロイドアプリケーションがハングアップします。 Windowsフォームアプリケーションでコードを試してみましたが、動作していましたが、例外は捕捉されていますが、Xamarinではハングします。私を助けてください。 HttpClientを使用して - 私はお勧めしたいxamarinでWebExceptionがキャッチされないandroid
MainActivity.cs
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
Button btn1 = FindViewById<Button>(Resource.Id.button1);
btn1.Click += (object sender, EventArgs e) =>
{
var result = Remote.Connect();
if(result == WebStatus.Authenticated)
{
Toast.MakeText(this, "Works!", ToastLength.Short).Show();
}
else if(result == WebStatus.Unauthorized)
{
Toast.MakeText(this, "Unauthorized", ToastLength.Short).Show();
}
else
{
Toast.MakeText(this, "Something went wrong!", ToastLength.Short).Show();
}
};
}
リモートクラス
public static WebStatus Connect()
{
// some code
WebRequest request = WebRequest.Create(url);
try
{
using (WebResponse response = request.GetResponse())
{
return WebStatus.Authenticated;
}
}
catch(WebException e)
{
using (WebResponse response = e.Response)
{
WebStatus status = new WebStatus();
HttpWebResponse httpResponse = (HttpWebResponse)response;
if (httpResponse != null)
{
switch (httpResponse.StatusCode)
{
case HttpStatusCode.Unauthorized:
status = WebStatus.Unauthorized;
break;
case HttpStatusCode.NotFound:
status = WebStatus.Error;
break;
default:
status = WebStatus.Error;
break;
}
}
return status;
}
}
}
例外はありませんが、サーバーがオフラインの場合はこれが機能します。それ以外の場合は、アプリケーションがクラッシュしました – paulharley421
上記のコードを非同期ブロックで呼び出すことはできますか? "GetAsync"の周りの試行がエラーを捕らえるはずです - 私はバニラアンドロイドアプリケーションでこれを再現しました。また、Microsoft.AspNet.WebApi.Clientのnugetパッケージがインストールされていることを確認してください。 –