addOnFailureListener가 오프라인 모드에서 작동하지 않음 및 네트워크 문제

Nov 14 2020

addOnFailureListner는 add () 데이터에 대해 작동하지 않지만 addOnFailureListner는 get ()에 대해 작동합니다.

이것은 작동하지 않습니다

      WorkPlaceRef.add(DATA).addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
            @Override
            public void onComplete(@NonNull Task<DocumentReference> task) {

                  //Successfully created - This one triggers when I turn on wifi again.

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Error - This addonFailureListner is not working when there are no network.

            }
        });

이것은 작동합니다

      WorkPlaceRef.get().addOnCompleteListener(new OnCompleteListener<DocumentReference>() {
            @Override
            public void onComplete(@NonNull Task<DocumentReference> task) {

                  //Successfully received - This one triggers when I turn on wifi again.

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

                // Error - this addonFialureListner triggers when there is no network.

            }
        });

답변

1 DougStevenson Nov 14 2020 at 16:16

오프라인 상태에서 데이터 쓰기를 시도하는 것은 실패가 아닙니다. Firestore SDK는 먼저 로컬 오프라인 캐시에 데이터 를 쓰고, 결국 앱이 다시 온라인 상태가되면 해당 쓰기를 서버와 동기화합니다. 성공 리스너는 그럴 때마다 호출됩니다.

쓰기 실패는 보안 규칙 위반 또는 문서화 된 데이터베이스 제한 초과와 같은 연결 부족으로 인해 재 시도 할 수없는 문제가있는 경우에만 발생 합니다.

일부 문서 데이터가 아직 서버와 동기화되지 않았 는지 알고 싶다면 해당 메타 데이터 를 확인하여 쓰기가 보류 중인지 알 수 있습니다 .

1 NadeemShaikh Nov 14 2020 at 16:19

get호출이 일어날 수 없기 때문에에 반면 기능은 작동 add이의이 왜에 표시되지 않도록 완료하기되어야합니다 OnFailure. 아래도 읽어보세요.

public abstract Task<TResult> addOnFailureListener (OnFailureListener listener)

Task가 실패 할 경우 호출되는 리스너를 추가합니다.

리스너는 메인 애플리케이션 스레드에서 호출됩니다. 작업이 이미 실패한 경우 리스너 호출이 즉시 예약됩니다. 리스너가 여러 개 추가되면 추가 된 순서대로 호출됩니다.

취소 된 작업은 실패한 작업이 아닙니다. 이 리스너는 태스크가 취소되면 트리거되지 않습니다. 자세한 내용은이 링크 를 참조하십시오 .