0

Je vois des erreurs dans Crashlytics uniquement pour Android 7 liées à Retrofit 2 et RxJava 1. Aucune mention de code d'application du tout. Les appareils n'ont pas été enracinés et l'application n'a pas été mise au point. Sur aucun de mes appareils, cela n'a pas encore été reproduit.Retrofit 2 + RxJava StackOverflowError sur Android 7

Stacktrace est la suivante:

Fatal Exception: java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread. 
    at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:114) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 
Caused by java.lang.StackOverflowError: stack size 1037KB 
    at rx.exceptions.Exceptions.throwIfAny(Exceptions.java:174) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:144) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.subscriptions.CompositeSubscription.unsubscribeFromAll(CompositeSubscription.java:186) 
    at rx.subscriptions.CompositeSubscription.unsubscribe(CompositeSubscription.java:175) 
    at rx.internal.util.SubscriptionList.unsubscribeFromAll(SubscriptionList.java:136) 
    at rx.internal.util.SubscriptionList.unsubscribe(SubscriptionList.java:125) 
    at rx.Subscriber.unsubscribe(Subscriber.java:98) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:820) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:276) 
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:276) 
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:266) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:818) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:579) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568) 
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onError(OperatorMerge.java:852) 
    at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError$1.onError(OperatorMapResponseToBodyOrError.java:52) 
    at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:178) 
    at rx.Subscriber.setProducer(Subscriber.java:211) 
    at rx.Subscriber.setProducer(Subscriber.java:205) 
    at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152) 
    at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138) 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) 
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) 
    at rx.Observable.unsafeSubscribe(Observable.java:10256) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248) 
    at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148) 
    at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) 
    at rx.internal.util.ScalarSynchronousObservable$ScalarAsyncProducer.call(ScalarSynchronousObservable.java:200) 
    at rx.internal.util.ScalarSynchronousObservable$2$1.call(ScalarSynchronousObservable.java:114) 
    at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.os.HandlerThread.run(HandlerThread.java:61) 

problème est fournisseur non spécifique (Samsung, Motorola, Huawei, etc.). Des pensées?

+0

montrez votre code, vous semblez vous désabonner infiniment (peut-être à onError?) – yosriz

+0

Codebase est énorme, ne peut pas vraiment localiser un problème à une partie spécifique du code :( – MikhailKrishtop

+0

Je ne peux rien dire exactement, mais voici quelques points, ce qui peut être utile: tout d'abord, l'erreur SO survient généralement lorsque vous avez des appels récursifs avec une mauvaise sortie de la deuxième sortie, et je suggère de gérer l'erreur initiale pour obtenir la source – MightySeal

Répondre

0

Basé sur la trace de la pile, vous semblez avoir des opérateurs merge extrêmement imbriqués. Y at-il lieu où vous travaillez avec une collection de Observables et de faire quelque chose comme

Iterator<Observable<T>> it = collection.iterator(); 
Observable<?> obs = it.next(); 
while(it.hasNext()) obs=obs.merge(it.next()); 

ou équivalent (éventuellement via .scan())?

+0

Votre suggestion m'a suggéré de regarder les demandes de backend, qui a la pagination dans lui.Et il y a fusion ainsi que flatMap.Il semble que le serveur répond d'une manière qui entraîne une boucle de demande sans fin.Même si je ne peux pas confirmer que cela provoque une erreur de sujet, je dois dire merci de m'indiquer Si cela devait être le cas je vous accepterais de répondre. – MikhailKrishtop