Firestore database on insert / delete document callbacks is not called when there is no connection

I am trying to create a firestore database on Android.

This is my code that inserts the document:

public Observable<Post> createPost(final Post post){


        return Observable.create(new Observable.OnSubscribe<Post>() {
            @Override
            public void call(final Subscriber<? super Post> subscriber) {

                try{

                    DocumentReference documentReference = getCollection().document();

                    post.setId(documentReference.getId());
                    documentReference.set(post).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {

                            subscriber.onNext(post);
                            subscriber.onCompleted();

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            subscriber.onError(e);
                            subscriber.onCompleted();
                        }
                    });


                }catch (Exception ex){

                    subscriber.onError(ex);

                    Log.e(LOG_TAG, ex.getMessage(), ex);

                }

            }
        });


    }

The document is inserted into the database, but none of the onSuccess calls and onFailure callbacks run.

Update 1


1) The problem is incompatible, sometimes it works, sometimes callbacks are called after a few hours, sometimes after 3 hours, etc.

2) This happens when there is no internet connection.

Update 2

1) The problem has been reported here and closed. I am not sure how to guarantee the correctness of the data created offline.

+2
source share
2

, , , onCompleteListener.

.addOnCompleteListener((Task<Void> task) -> {
                    if(task.getException() != null) {
                        emitter.onError(task.getException());
                    }
                    if(task.isComplete()) { //try task.isSuccessful() if this is what you are looking for
                        emitter.onComplete();
                    }
                });

, , :

Completable completable$ = Completable.create((CompletableEmitter emitter) -> {
    firebaseFirestore.collection(collection).document(document)
        .delete()
        .addOnSuccessListener((Void aVoid) -> emitter.onComplete())
        .addOnFailureListener((Exception e) -> emitter.onError(e))
        .addOnCompleteListener((Task<Void> task) -> {
            if(task.getException() != null) {
                emitter.onError(task.getException());
            }
            if(task.isComplete()) { //try task.isSuccessful()
                emitter.onComplete();
            }
        });
});
return completable$;
0

, , User. .

. Observable<DocumentReference> , .

public  Observable<DocumentReference> insertToFirebaseFirestore$() {
    UserEntity userEntity = new UserEntity();
    userEntity.setEmail("myemail@myemail.com");
    userEntity.setBio("I'm a cool cat!");
    userEntity.setDisplayName("KoolKat!");

//Notice here I am using an ObservableEmitter instead of Subscriber like you did
    return Observable.create((ObservableEmitter<DocumentReference> emitter) -> {
        this.firebaseFirestore.collection("tempUsers")
                .add(userEntity)
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        emitter.onError(e);
                    }
                })
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                    @Override
                    public void onSuccess(DocumentReference documentReference) {
//this gets triggered when I run
                        emitter.onNext(documentReference);
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentReference> task) {
//this also gets triggered when I run
                        emitter.onNext(task.getResult());
                    }
                });
    });

}

onSuccess onComplete. , .

Activity .

...onCreate method
insertToFirebaseFirestore$()
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.io()) //observe on io thread cause I don't need it to updateUI.
        .subscribe((DocumentReference val) ->{
            Log.e("USERACTIVITY", "You have uploaded " + val.getId());
        });

LogcatPrints

12-13 09:47:47.942 15007-15059/com.example.debug E/USERACTIVITY: You have uploaded sFBsF4ZmwGaDdxCEKuF6
12-13 09:47:57.563 15007-15059/com.example.debug E/USERACTIVITY: You have uploaded sFBsF4ZmwGaDdxCEKuF6.
  • , , , emitter Observable.create.
  • , firestore
  • , , ,
0

All Articles