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"
}
}
我試圖將所有內容都放入活動中,而不使用DBHelper類。我在onCreate方法中創建了ref,並且在我的活動中放入了deleteUser方法。這是同樣的問題 – Gabriela
好像你沒有實現實例狀態保存。請參閱http://stackoverflow.com/questions/16769654/how-to-use-onsaveinstancestate-and-onrestoreinstancestate – Henry
這是「Firebase數據庫錯誤:權限被拒絕」。但是,爲什麼如果我從數據庫刪除數據之前重新認證用戶? – Gabriela