Android studio中的对话框密码框中传递了空字符串,但toast可以显示键入的内容,为什么?

Android studio中的对话框密码框中传递了空字符串,但toast可以显示键入的内容,为什么?,android,string,authentication,dialog,gettext,Android,String,Authentication,Dialog,Gettext,我试图制作一个简单的警告对话框,让用户输入用户名和密码,然后将其发送回应用程序并关闭对话框。我正在尝试将文本作为字符串输入到编辑文本框中,但是当我尝试将它们添加到字符串中时,它们是空的。但是,toast会显示输入框中的内容,如下例所示:为什么pwtest和untest字符串为空 import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.cont

我试图制作一个简单的警告对话框,让用户输入用户名和密码,然后将其发送回应用程序并关闭对话框。我正在尝试将文本作为字符串输入到编辑文本框中,但是当我尝试将它们添加到字符串中时,它们是空的。但是,toast会显示输入框中的内容,如下例所示:为什么pwtest和untest字符串为空

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;


public class createid extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.create, null);
        AlertDialog.Builder builder= new AlertDialog.Builder(getActivity());

    builder.setTitle("Create ID");
    builder.setView(view);

    final EditText userid = view.findViewById(R.id.newusername);
    final EditText password = view.findViewById(R.id.newpassword);

    final String pwtest = password.getText().toString();
    final String untest = userid.getText().toString();

    builder.setNegativeButton("Cancel", null);
    builder.setPositiveButton("Create ID", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {


            Toast.makeText(getActivity(), "User ID:" +userid.getText().toString() + "Password:" + password.getText().toString() +
                    "userstring is:" + untest + "password string is:" + pwtest, Toast.LENGTH_LONG).show();
        }
    });

    return builder.create();
}

@Override
public void onCancel(DialogInterface dialog) {
    super.onCancel(dialog);
    Toast.makeText(getActivity(), "Dialog Cancelled", Toast.LENGTH_SHORT).show();
}

}您在错误的时间调用代码,问题是您在用户可以对编辑文本执行任何操作之前请求编辑文本中的值,因此您收到的是空字符串

该代码应该添加到onClick接口中,而不是初始化

正确的代码是:

   @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.create, null);
        AlertDialog.Builder builder= new AlertDialog.Builder(getActivity());

    builder.setTitle("Create ID");
    builder.setView(view);

    final EditText userid = view.findViewById(R.id.newusername);
    final EditText password = view.findViewById(R.id.newpassword);



    builder.setNegativeButton("Cancel", null);
    builder.setPositiveButton("Create ID", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

 // You should get the String value here, after they're done writing in edit text.
 final String pwtest = password.getText().toString();
    final String untest = userid.getText().toString();


            Toast.makeText(getActivity(), "User ID:" +userid.getText().toString() + "Password:" + password.getText().toString() +
                    "userstring is:" + untest + "password string is:" + pwtest, Toast.LENGTH_LONG).show();
        }
    });

    return builder.create();
}

谢谢,经过几周的尝试,我的问题终于解决了。