es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

RxJava – ¿Cómo llamar el método onError() de .subscribe()?

Tengo un Single.fromCallable() al que estoy suscrito. Utilizando LiveData, estoy intentando probar la manipulación de errores de la interfaz de usuario dentro del método de devolución de llamada onError() de .subscribe().

He intentado lanzar Exceptions, llamar a disposable.dispose(), pero no puedo simular un error para que vaya directamente al bloque onError().

 Single.fromCallable(() -> remoteRepository.doSomething())
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<biginteger>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        walletStatusLiveData.setValue("Ahora suscrito");

                    // ¿Cómo simulo el error aquí para que salte a onError() y pueda probar mi manejo de errores en la interfaz de usuario?

                   throw new IllegalArgumentException(); // La aplicación se bloquea
                   throw new RuntimeException(); // La aplicación se bloquea

                   try {
                        throw new IllegalArgumentException();  // Este trycatch no hace nada y se llama a onSuccess
                    }catch (Exception e){

                    }

                   d.dispose(); // Esto sale completamente de los 3 métodos de devolución de llamada.

                }

                @Override
                public void onSuccess(@NonNull BigInteger result) {
                    walletStatusLiveData.setValue("¡En éxito!");
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    Log.e(TAG, "onError: getWalletBalance Llamado", e);
                    walletStatusLiveData.setValue("Probando interfaz de usuario de error");
                    // ¿Cómo puedo activar este método de devolución de llamada en onSubscribe o onSuccess?
                }
            });

¿Qué debo llamar para saltar a .onError()?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para saltar a .onError(), puedes lanzar una excepción dentro de Single.fromCallable(). Aquí tienes un ejemplo:

    Single.fromCallable(() -> {
        // realizar algún trabajo aquí
        throw new Exception("Error falso");
    }).subscribeOn(Schedulers.newThread())
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(new SingleObserver<biginteger>() {
          @Override
          public void onSubscribe(@NonNull Disposable d) {
              // ...
          }
    
          @Override
          public void onSuccess(@NonNull BigInteger result) {
              // ...
          }
    
          @Override
          public void onError(@NonNull Throwable e) {
              // manejar el error aquí
          }
      });
    

    De esta manera, cuando se ejecute Single.fromCallable(), lanzará una excepción y la ejecución saltará directamente a .onError().

Comments are closed.