2016-08-03 4 views
2

Retrofit 2でインターネット接続エラーを検出できません。Retrofit 2で「インターネットに接続できません」というエラーを検出しました

Retrofit 1で私がしていたことは、クライアントインターフェイスを実装し、実行時に接続チェックを実行することでした。私はレトロフィット2で試み何

です:

public class RequestInterceptor implements Interceptor { 

    final ConnectivityManager connectivityManager; 

    @Inject 
    public RequestInterceptor(ConnectivityManager connectivityManager) { 
     this.connectivityManager = connectivityManager; 
    } 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     if (isConnected()) { 
      throw new OfflineException("no internet"); 
     } 

     Request.Builder r = chain.request().newBuilder(); 
     return chain.proceed(r.build()); 
    } 

    protected boolean isConnected() { 
     NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
     return networkInfo != null && networkInfo.isConnectedOrConnecting(); 
    } 

} 

私はではなく、エラーがONFAILUREのパラメータとして返され、非同期で(、try-catchブロックを追加することにより、同期レトロフィットの実行でそれをキャッチすることができていますコールコール、Throwable t)。アプリケーションはちょうどOfflineExceptionでクラッシュし、私はインターセプターを投げます。

+0

を継承する必要があります。単に 'chain.proceed(chain.request())'を呼び出してください。 –

+0

@awonderer - この方法はネットワーク接続をチェックするだけで、インターネット接続もチェックしますか? –

答えて

1

解決策が見つかりました。

OfflineExceptionクラスは、新しい要求を構築する際ところで、あなたは不要なオブジェクトの割り当てを行っているIOException

関連する問題