vavr-io/vavr

Strange behaviour, maybe an error when using peek on Android 5.1.1

Open

#2761 aperta il 3 apr 2024

Vedi su GitHub
 (2 commenti) (0 reazioni) (0 assegnatari)Java (605 fork)batch import
help wanted

Metriche repository

Star
 (5390 star)
Metriche merge PR
 (Merge medio 2g 17h) (13 PR mergiate in 30 g)

Descrizione

The following code runs fine on newer Android versions. However, I've encountered an issue on Android 5.1.1.

After an HTTP request is returned, attempting to use peek to retrieve either the data or an error response results in unexpected behavior.

My request looks like this:

public Either<Failure, Authenticated> executeRequest(Params params) {
// return Failure or Authenticated
}

I expect the result to be received in my view model. Here's a simplified example of the expected behavior:

myUseCase.execute(signIn).peek(
   failure -> {},
   result -> {}
);

Neither the failure nor the success callback is triggered in the view model. However, I observed the following log message:

Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda0>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda0>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda1>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda1>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda2>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.control.Either$$ExternalSyntheticLambda2>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.Function1>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.Function1>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.PartialFunction>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.PartialFunction>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Seq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Seq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.IndexedSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.IndexedSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Vector>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Vector>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.IndexedSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Array>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Array>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Array>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.IndexedSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.CharSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.CharSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.CharSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.PartialFunction>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Seq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.LinearSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.LinearSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.List>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.List>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.List>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.LinearSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Queue>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Queue>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Queue>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Map>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.SortedMap>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.LinearSeq>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Stream>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Stream>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Stream>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.List>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.List>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Vector>
Rejecting re-init on previously-failed class java.lang.Class<io.vavr.collection.Vector>
Rejecting re-init on previously-failed class java.lang.Class<com.mypackage.myapp.fragments.LoginFragmentViewModel$$ExternalSyntheticLambda1>

If I rewrite this using the following, it works:

Either<Failure, Authenticated> result = myUseCase.execute(signIn);

if(result.isLeft()) {
   Failure failure = result.getLeft();
} else {
   Authenticated authenticated = result.get();
}

Guida contributor