2017-12-12 16 views
0

약간의 문제가 있습니다. 로그 아웃 버튼을 구현하면 앱 사용자가 null이고 그 사이에 앱이 종료되기 때문에 로그 아웃 버튼을 누르면 문제가 발생합니다. 일부 파일을 데이터베이스에 업로드하므로 데이터를 게시하기 위해 사용자에게 도달해야 할 때 사용자는 null입니다. firebase에 업로드가 완료되고 로그 아웃 될 때까지 기다리거나 기다릴 수있는 방법이 있습니까, 아니면 타이머를 구현해야합니까?데이터가 전송 될 때까지 기다리는 방법 Firebase

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 

     mAuth = FirebaseAuth.getInstance(); 
     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

       if(firebaseAuth.getCurrentUser() == null){ 
        Intent mainIntent = new Intent().setClass(
          prefs.this, LoginActivity.class); 
        startActivity(mainIntent); 
        finish(); 

       } 

      } 
     }; 

나는이 청취자가 사용자가 로그인했는지 여부를 확인할 수 있습니다.

는 그리고 이것은 당신은 기다릴 필요가 없습니다

Preference button = findPreference(getString(R.string.pref_header_cerrar_sesion)); 
       button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
        @Override 
        public boolean onPreferenceClick(Preference preference) { 


         FirebaseAuth.getInstance().signOut(); 
         finish(); 


         return true; 
        } 
       }); 
+0

signOut()에는 콜백이 없습니다. 파이어베이스가 로컬 데이터 지속성으로 자동으로 관리한다고 생각합니다. 로그 아웃에 대한 걱정은 없습니다. – ADM

답변

1

, 당신은 데이터가 커밋 된 때 알아야 할 내 signout 버튼입니다. 이를 위해 completion listener을 추가 할 수 있습니다. setValue() 및 updateChildren() 두 가지 메서드는 쓰기가 데이터베이스에 커밋 될 때 호출되는 선택적 완료 수신기를 사용합니다. 이를 위해 다음 코드를 사용하십시오.

yourRef.setValue("I'm writing data", new Firebase.CompletionListener() { 
    @Override 
    public void onComplete(FirebaseError firebaseError, Firebase firebase) { 
     if (firebaseError != null) { 
      Log.d("TAG", "Data could not be saved. " + firebaseError.getMessage()); 
     } else { 
      Log.d("TAG", "Data saved successfully."); 
     } 
    } 
}); 
+0

그래서 oncompletion에서 firebase.signout을 넣어야합니다. –

+0

흐름은 다음과 같습니다. 데이터베이스에 데이터 쓰기 -> CompletionListener 추가 -> onComplete 메소드가 호출되고 오류가없는 경우 -> 원하는 것을하십시오. –