Я пытаюсь выйти из приложения.
Что я могу сделать до сих пор?
Я могу выйти из системы, нажав кнопку
Что я хочу?
Когда пользователь нажимает кнопку выхода, я хочу всплывающее диалоговое окно, которое спрашивает пользователя, уверен ли он в этом, а затем из положительного Кнопка Я хочу выйти, а затем начать действие входа в систему
В чем проблема?
В прослушивателе щелчка положительной кнопки диалога я написал код для выход из системы, но поскольку выделенный код является асинхронным, и диалоговое окно было немедленно закрыто при нажатии положительной кнопки, поэтому при запуске onComplete()
диалоговое окно не появляется, поскольку оно уже закрыто, поэтому я получаю ошибку
java.lang.IllegalStateException: Fragment SignOutDialog{fef4a91 (b8bfbb8c-cdff-4244-9952-81516d1ed736)} not attached to Activity
Это код
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.sign_out)
.setMessage(R.string.sure_sign_out)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
signOut();
}
}).create();
}
private void signOut(){
AuthUI.getInstance().signOut(mContext)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()) {
Intent intent = new Intent(mContext,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
else
Toast.makeText(getContext(),"Sign out failed, try again",Toast.LENGTH_LONG).show();
}
});
}
Какие еще подходы я пробовал
1 Я попытался написать код для выхода после показа диалога в том же фрагменте, в котором находится диалог
Что-то вроде
public void onClick(View v) {
new SignOutDialog(getActivity()).show(getFragmentManager(),"tag");
signOut();
}
Но проблема в том, что диалог также асинхронный, поэтому после показа диалогового окна выполняется код выхода из системы, и пользователь не получает возможности нажать положительную кнопку. диалога.
2 Я попытался написать метод выхода из фрагмента, где находится код для отображения диалога, а затем попытался вызвать этот метод из единственного экземпляра фрагмента из внутренний диалог, потому что этот фрагмент будет присоединен при закрытии диалога, поэтому я не получу ошибку выше
что-то вроде
public void onClick(DialogInterface dialog, int which) {
SettingsFragment.getInstance().signOut();
}
Но такой подход дает мне следующую ошибку
java.lang.NullPointerException: Null context is not permitted.
я не понял этой ошибки, потому что в signOut(context)
я использую тот же контекст, что и в onAttach()
, я также пробовал getActivity()
, getContext()
и getConext().getApplicationContext()
, а фрагмент находится на переднем плане контекст должен быть действительным, но он говорит, что это нуль. Даже если он как-то работает, я не хочу использовать этот подход, потому что он не очень чистый.
Может кто-нибудь, пожалуйста, помогите мне, пожалуйста?