2016-11-16 15 views
0

私はRxJavaをAndroidアプリで使用していますが、onErrorに問題があります。RxJava Android onErrorの呼び出しに時間がかかりすぎる

私はこれやってる:ネットワーク接続が利用できると、私はエラーを返していない場合であれば、私はチェックoperationalConfig方法では、いくつかの点で

operationalLayer.operationalConfig(new OperationalRequest()) 
    .subscribeOn(Schedulers.immediate()) 
    .observeOn(Schedulers.immediate()) 
    .subscribe(new CustomSubscriber<OperationalResponse>(bundle, null) { 
     @Override 
     public void onNext(OperationalResponse response) { 
      //Do something 
      super.onNext(response); 
     } 
    }); 

を。

@Override 
public void onError(final Throwable e) { 
    if (e instanceof NoInternetException) { 
     // do something 
     Log.d("No internet connection available"); 
    } 
    // other things 
} 

は、利用可能なインターネット接続がないことを検出しますと onErrorメソッドが呼び出されているので、私は巨大な遅延を有するログメッセージを見る:

public Observable<OperationalResponse> operationalConfig(final OperationalRequest operationalRequest) { 
    if (!Network.hasInternet()) { 
     Log.d("No available internet for operationalConfig"); 
     return Observable.error(new NoInternetException()); 
    } 

    return Observable.defer.... 
} 

はなく、私のCustomSubscriberに私はこれを持っています。

11-16 12:07:37.378 23779-24183 D/CustomTag: OperationalLayer No available internet for operationalConfig 
11-16 12:07:57.459 23779-24416 D/CustomTag: CustomSubscriber No internet connection available 

なぜか?

+0

observeOnを削除し、subscribeOnのSchedulers.io()を使用して、結果を再度検証できますか? –

+0

@HansWurst試してみましたが、もっと時間がかかると思います。おおよそ20秒からほぼ2分まで – Favolas

+0

うん、ここで何か壊れているのを見ない。デバッグに役立つコードがさらに必要になります。実際には、operationalConfig内のすべてをObservable.deferにラップして、サブスクリプションをブロックしないようにします。サブスクリプションのonNextは、指定されたスケジューラーで発生しますが、ネットワークが使用可能かどうかの入力と検査は、現在のスレッドで行われます。 –

答えて

0

問題が見つかりました。

関連性が低いと思われるため、ここにコードを掲載していません。実際はそうだった。ネットワーク接続場合は、再試行メカニズムはすぐに停止しているように、私は今、適切にエラーを処理retryWhenに渡すFuncインサイド

@Override 
    public Observable<OerationalResponse> operationalConfig(OperationRequest operationalRequest) { 
     //Something 
     return network.opcoConfigs(opcoConfigRequest) 
       .retryWhen(//Something); 
    } 

operationalLayer.operationalConfigと方法自体Iとの間に

はこれを持っていましたInternetExceptionが加入者に返されます。

+0

私は持っています同様の問題ですが、私はあなたの説明でそれを解決できませんでした。見てみることができますか:https://stackoverflow.com/questions/46202300/retrofit-rxjava-takes-long-time-to-invoke-onerror-when -server-connection-faile/46213362#46213362 –

関連する問題