2015-02-10 3 views
13

Bir projede eksik bir onError() bulmaya çalışıyorum. Bu, bir abonelik throwables işlemez, çünkü bu alt yazıyı bulmak ve onError yöntemini eklemek istiyorum çünkü uygulama çöker demektir. Projede eksik olan Avarası bulun

Maalesef StackTrace burada gerçekten yararlı değildir ve sadece throw new IOException çizgisini ama daha hiçbir şey gösterir:

FATAL EXCEPTION: main 
    Process: my.app.example.dev, PID: 20309 
    java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread. 
      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:54) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: rx.exceptions.OnErrorFailedException: Error occurred when trying to propagate error to Observer.onError 
      at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:201) 
      at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111) 
      at rx.android.app.OperatorConditionalBinding$1.onError(OperatorConditionalBinding.java:69) 
      at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147) 
      at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177) 
      at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65) 
      at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153) 
      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47) 
            at android.os.Handler.handleCallback(Handler.java:739) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: rx.exceptions.CompositeException: 2 exceptions occurred. 
            at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:201) 
            at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111) 
            at rx.android.app.OperatorConditionalBinding$1.onError(OperatorConditionalBinding.java:69) 
            at rx.internal.operators.NotificationLite.accept(NotificationLite.java:147) 
            at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:177) 
            at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65) 
            at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153) 
            at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47) 
            at android.os.Handler.handleCallback(Handler.java:739) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: rx.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received => 
      at com.splunk.mint.ExceptionHandler.uncaughtException(ExceptionHandler.java:42) 
      at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 
      at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 
      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:58) 
            at android.os.Handler.handleCallback(Handler.java:739) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: retrofit.RetrofitError: java.io.IOException: No connectivity 
      at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:385) 
      at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:221) 
      at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:271) 
      at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:269) 
      at retrofit.RxSupport$2.run(RxSupport.java:46) 
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.io.IOException: No connectivity 
      at my.app.example.manager.ApiManager$NetworkAwareOKClient.execute(ApiManager.java:1071) 
      at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:322) 
            at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:221) 
            at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:271) 
            at retrofit.RestAdapter$RestHandler$1.call(RestAdapter.java:269) 
            at retrofit.RxSupport$2.run(RxSupport.java:46) 
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
            at java.lang.Thread.run(Thread.java:818) 

onError() yok abonelik (kodda çizgi) bulmak için herhangi bir fikir?

cevap

23

Bu, hata ayıklaması için bir acı olabilir. Son derece yeterli Action1<Throwable> [facepalm] içinde bir hata vardı.

En iyisi, hata ayıklamaktı; bu, genel bir hata işleyicisini kaydetmektir.

RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { 
     @Override 
     public void handleError(Throwable e) { 
      Log.w("Error",e); 
     } 
});  

github üzerinde bir tartışma: onError uygulanmazsa https://github.com/ReactiveX/RxJava/issues/2293

+0

kod parçası ekleyerek yukarıdaki kod eklendi ve ben log.w hata mesajı var, ama uygulama hala kazasında got sorunu –

+1

çözer. Ben yanlış bir şey mi yaptım? – User9527

+0

@ User9527 aboneden herhangi bir abonelik çağrısı kaldırdınız (onNext, onError, onComplete)? Eğer yapmıyorsanız, bunu yapmalısınız :) – Diolor

1

, ardından OnErrorNotImplementedException istisna RxJava Bu size kodunuzda gerçeği gördü. Görünüşe göre, RxJava onError yöntemini çağırmayı başaramadı ("Hataları Observer.onError'a iletmeye çalışırken hata oluştu")

Kök istisnasını bulmak için bir hata işleyicisi kaydetmeyi deneyebilirsiniz.

static { 
    RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { 
     @Override 
     public void handleError(Throwable e) { 
      e.printStackTrace(); 
     } 
    }); 
}