android - 删除 Firebase 用户并返回登录
问题描述
我正在创建一个 Firebase 项目,它在导航抽屉中有一个设置选项,其中有一个删除用户的按钮。如果用户单击按钮,我会向他显示我的警报对话框,如果他按下是,我希望他从 Firebase 数据库中删除,并且作为用户,敬酒并返回登录屏幕。一切正常,但是在我打算进入我的 Login.class 后,如果我单击后退按钮,它会将我移回设置选项卡,就好像用户仍然登录(但他没有登录,它已被删除)。有没有办法完成那个片段以便无法回到那里?这是我的代码。
片段设置.class
public class FragmentSettings extends Fragment {
Button delete, change, rateus;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_settings, container, false);
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
delete = v.findViewById(R.id.settings_delete);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
.setMessage("Are you sure you want to delete your account? This will permanently delete all of your information.")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Deleting user info from database
mDatabase.getReference().child(user.getUid()).removeValue();
//Deleting user.
user.delete();
//Signing out and back to login.
FirebaseAuth.getInstance().signOut();
Intent intent = new Intent(getContext(),Login.class);
Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container);
if(fragment != null)
getFragmentManager().beginTransaction().remove(fragment).commit();
startActivity(intent);
}
})
.setNegativeButton("No", null)
.show();
}
});
change = v.findViewById(R.id.settings_change);
change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeFragment();
}
});
rateus = v.findViewById(R.id.settings_rateus);
rateus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "App will be in App-Store soon!", Toast.LENGTH_SHORT).show();
}
});
return v;
}
private void changeFragment() {
FragmentChangePassword newChangePasswordFragment = new FragmentChangePassword();
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, newChangePasswordFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
解决方案
在调用finish()
登录活动的意图后调用。像这样:
//Signing out and back to login.
FirebaseAuth.getInstance().signOut();
Intent intent = new Intent(getContext(),Login.class);
Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment_container);
if(fragment != null)
getFragmentManager().beginTransaction().remove(fragment).commit();
startActivity(intent);
finish();
推荐阅读
- openlayers-5 - 每个顶点的 OpenLayers v5.3 自定义样式
- hyperledger-composer - 没有为类型 org.comp.item 定义命名空间
- java - SpringBoot 集成流应用程序在启动时关闭
- git - 从一个分叉合并到另一个分叉
- angular - Angular 和数据存储库模式
- popper.js - popper.js 没有任何样式显示
- java - Kafka 或 Java Locks 用于银行账户/钱包余额更新用例,选择哪一个以获得更好的性能?
- ios - 应用程序在后台 ios 中时地理围栏不起作用
- python - 在 PyCharm 中导入 fastai.imports 在运行文件时有效,但在 Python 控制台中无效
- python - 在python中将浮点数舍入到下一个整数