2017-05-08 8 views
1

私のアプリはHTTPS接続が必要なapiに接続します。
例外がスローされるまで、ModernHttpClients(NativeMessageHandler)は正常に動作します...
利用可能なWi-Fiがない場合、AndroidではUnknownHostExceptionがスローされます。 AndroidとiOSの両方で動作するキャッチを作ることは可能ですか? UnknownHostExceptionはJava.Netライブラリにあり、iOSプロジェクトでは使用できません。Xamarinフォーム:ModernHttpClientがPCLでエラー処理する

答えて

2

ネットワークエラーを処理するためのプラットフォームインターフェイス

try 
{ 
    var client = new HttpClient(); 
    var result = await client.GetAsync("http://some-url.com"); 
} 
catch (Exception e) 
{ 
    var platformErrorChecker = Mvx.Resolve<IPlatformNetworkError>(); 
    if (platformErrorChecker.IsNetworkError(e)) 
    { 
     // Handle network error 
    } 
    else 
    { 
     // Other exception, just throw 
     throw; 
    } 
} 

として定義されたサービス:

必要な場所あなたは具体的には、のみ、各プラットフォーム上で実装
public interface IPlatformNetworkError 
{ 
    bool IsNetworkError(Exception e); 
} 

あなたは、例えば缶(この例ではMvvmCrossを使用して)のようなものを持っています。これは簡単な例ですが、各プラットフォームに特定のネットワークエラーに関する詳細情報を提供させることができます。

1

共有XamarinフォームコードでConnectivityPluginを使用して、リクエストを行う前にインターネット接続を確認できます。あなたは

if (CrossConnectivity.Current.IsConnected) { 
    // your logic... 
} else { 
    // write your code if there is no Internet available 
} 

OR

は個人的に私はクロスを使用していhttp://www.c-sharpcorner.com/blogs/how-to-check-network-connectivity-in-xamarinforms

+0

実際にはモバイル接続があるが、それは薄れているなど、発生する可能性がある他のすべてのエラーを考慮しても、本当に素晴らしいソリューションです。あなたがあなたのものをやり始めるときに接続があるという事実は、あなたのものをやっている間にそこにとどまることを絶対に保証するものではありません。 –

+0

絶対に真ですが、同じコンポーネントでは接続が変更されたときに処理するイベントも公開されるため、説明しているような状況に対処できるようにすることができます。 –

+0

リクエストを実行しているときに接続が切断された場合は、ほとんど役に立ちません。私はあなたが接続を確認してはならないと言っているわけではありません - あなたはすべきです、そして、それは多くの問題を防ぎます。私は、接続の例外処理を実行する必要がなくなったと言っています。 –

0

を参照してください、次のコードを使用してXamarin.Formsでネットワーク接続を確認するためにXam.Plugin.Connectivity NuGetパッケージを使用することができます

関連する問題