无法关闭Android中的对话框

问题描述

我不知道为什么无法关闭我的对话框。实际上,我在数据库中看到成功获取的数据已保存在该数据库中。只是对话框关闭代码无法正常工作。

这是我的代码

package com.app.kfstore.EmailLoginRegister;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.app.kfstore.MainActivity;
import com.app.kfstore.OperationRetrofitApi.apiclient;
import com.app.kfstore.OperationRetrofitApi.ApiInterface;
import com.app.kfstore.OperationRetrofitApi.Users;
import com.app.kfstore.R;
import com.blogspot.atifsoftwares.animatoolib.Animatoo;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class EmailRegisteractivity extends AppCompatActivity {

    private EditText name,email,password;
    private Button regBtn;
    public static ApiInterface apiInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_email_register);

        //////hide status bar code//////
        getwindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //////end code for hide status bar//////

        apiInterface = apiclient.getapiclient().create(ApiInterface.class);

        init();

    }

    private void init() {

        name = (EditText) findViewById(R.id.name);
        email = (EditText) findViewById(R.id.email);
        password = (EditText) findViewById(R.id.password);
        regBtn = (Button) findViewById(R.id.button2);

        regBtn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Registration();

            }
        });

    }

    private void Registration() {

        String user_name = name.getText().toString().trim();
        String user_email = email.getText().toString().trim();
        String user_password = password.getText().toString().trim();

        if(TextUtils.isEmpty(user_name)){
            name.setError("Name is required!");
        }

        else if(TextUtils.isEmpty(user_email)){
            email.setError("Email is required!");
        }

        else if(TextUtils.isEmpty(user_password)){
            password.setError("Password is required!");
        }

        else {
            ProgressDialog dialog = new ProgressDialog(this);
            dialog.setTitle("Registering...");
            dialog.setMessage("Please wait while we adding your credentials");
            dialog.show();
            dialog.setCanceledOnTouchOutside(false);

            Call<Users> call = apiInterface.performEmailRegistration(user_name,user_email,user_password);
            call.enqueue(new Callback<Users>() {
                @Override
                public void onResponse(Call<Users> call,Response<Users> response) {
                    if(response.body().getResponse().equals("ok")){
                        Toast.makeText(EmailRegisteractivity.this,"Your account has been created",Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }

                    else if(response.body().getResponse().equals("Failed!")){
                        Toast.makeText(EmailRegisteractivity.this,"Something went wrong,Please try again!",Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }

                    else if(response.body().getResponse().equals("already")){
                        Toast.makeText(EmailRegisteractivity.this,"This email is already exists,Please try another email",Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                }

                @Override
                public void onFailure(Call<Users> call,Throwable t) {

                }
            });
            }

    }

    //////link code for text go to login page//////
    public void goToLogin(View view) {

        Intent intent = new Intent(EmailRegisteractivity.this,EmailLoginActivity.class);
        startActivity(intent);
        Animatoo.animateSlideRight(this);
        finish();
    }
    ///////end of code//////

    //////link code for back button go to main page//////
    public void goToMainPage(View view) {

        Intent intent = new Intent(EmailRegisteractivity.this,MainActivity.class);
        startActivity(intent);
        Animatoo.animateSlideRight(this);
        finish();
    }
    //////end of code//////

}

这便于查看代码(只是相同的代码,但我只是剪切了顶部和底部代码

else {
            ProgressDialog dialog = new ProgressDialog(this);
            dialog.setTitle("Registering...");
            dialog.setMessage("Please wait while we adding your credentials");
            dialog.show();
            dialog.setCanceledOnTouchOutside(false);

            Call<Users> call = apiInterface.performEmailRegistration(user_name,Throwable t) {

                }
            });
            }

    }

结果仅运行对话框而没有关闭对话框

enter image description here

如果您有任何想法或建议,我非常感激。 谢谢

解决方法

只需尝试您的代码,它就可以完美运行。

确保在onResponse中有一个'else'子句,并在onFailure中关闭该对话框

@Override
public void onResponse(Call<Users> call,Response<Users> response) {
    if(response.body().getResponse().equals("ok")){}
    else if(response.body().getResponse().equals("failed!")){}
    else if(response.body().getResponse().equals("already")){}
    else {
        Toast.makeText(EmailRegisterActivity.this,"Do'h,I forgot to put and 'else' clause",Toast.LENGTH_SHORT).show();
        dialog.dismiss();
    }
}

@Override
public void onFailure(Call<Users> call,Throwable t) {
    Toast.makeText(EmailRegisterActivity.this,Failure :(",Toast.LENGTH_SHORT).show();
    dialog.dismiss();
}