2017-05-12 51 views
1

我想從實時firebase中刪除一些用戶。這是工作,但如果我把應用程序放在後臺,當我再次打開應用程序時,用戶不會從數據庫中刪除。 在調試模式下,用戶被刪除,但沒有休息。 我還使用Firebase提供的電子郵件/密碼驗證。爲什麼在應用程序在後臺後從Firebase中刪除數據不起作用?

這裏是我的代碼(梅索德處於onOptionsItemSelected呼籲菜單):

public void reAuthenticateUser(String password) { 
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    AuthCredential credential = EmailAuthProvider 
      .getCredential(user.getEmail(), password); 
    user.reauthenticate(credential) 
      .addOnCompleteListener(new OnCompleteListener<Void>() { 
       @Override 
       public void onComplete(@NonNull Task<Void> task) { 
        if(!task.isSuccessful()){ 
         handleExceptions(task.getException()); 
        } 
        else{ 
         dialog.dismiss(); 
         Toast.makeText(BaseActivity.this,DBHelper.getInstance().getDatabase().toString(),Toast.LENGTH_LONG).show(); 
         DBHelper.getInstance().deleteUser(user.getUid()); 
         //ref.child("users").child(user.getUid()).setValue(null); 
         Log.d("ReAuth", "User re-authenticated."); 
         deleteUserAccount(); 
        } 
       } 
      }); 

} 

這裏是我的DBHelper類:

public class DBHelper { 

private static DBHelper instance = null; 
private FirebaseDatabase database; 
private DatabaseReference ref; 

private DBHelper(){ 
    database = FirebaseDatabase.getInstance(); 
} 

public static DBHelper getInstance() { 
    if(instance == null) 
     instance = new DBHelper(); 

    return instance; 
} 

public void saveUserOnDB(String userId, String name, String email) { 
    ref = database.getReference().child("users"); 
    ref.child(userId).setValue(new User(name, email)); 
} 

public void deleteUser(String userId) { 
    ref = database.getReference().child("users"); 
    ref.child(userId).setValue(null); 
} 

}

編輯 DB規則:

 { 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 

回答

0

private static DBHelper dbHelper = new DBHelper();可能是您的問題。 當應用程序在後臺時,操作系統可能會殺死它以釋放一些內存。如果將它重新放在前面,則可以重新啓動活動,因爲它們將狀態存儲到磁盤,但是靜態變量會丟失。

+0

我試圖將所有內容都放入活動中,而不使用DBHelper類。我在onCreate方法中創建了ref,並且在我的活動中放入了deleteUser方法。這是同樣的問題 – Gabriela

+0

好像你沒有實現實例狀態保存。請參閱http://stackoverflow.com/questions/16769654/how-to-use-onsaveinstancestate-and-onrestoreinstancestate – Henry

+0

這是「Firebase數據庫錯誤:權限被拒絕」。但是,爲什麼如果我從數據庫刪除數據之前重新認證用戶? – Gabriela

相關問題