Android: Не удается прочитать текст в EditBox внутри диалогового окна

#android #android-edittext

#Android #android-edittext

Вопрос:

Я хочу получить пользовательский ввод с помощью всплывающего диалогового окна. Я могу показать диалоговое окно с редактируемым текстом, и пользователь может ввести входные данные. Но когда я пытаюсь получить это значение, я просто получаю null.

Это достаточно простой код. Вероятно, я здесь упускаю что-то действительно элементарное. Не уверен, что!

 private void getUserInput(String prompt) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(prompt);
    final EditText inputBox = new EditText(this);
    builder.setView(inputBox);
    builder.setPositiveButton(android.R.string.ok,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    String str = "";
                    Log.d(DEBUG_TAG, "OK button clicked");
                    if (inputBox.getText() != null) { //PROBLEM: why is inputBox.getText null?? 
                        str = "null";
                    } else {
                        str = inputBox.getText().toString();
                    }
                    Log.d(DEBUG_TAG, "input text >>>"   str);
                    dialog.dismiss();
                }
            });
    builder.show();
}
  

Комментарии:

1. Вы действительно установили текст в EditText?

2. @AedonEtLIRA: пользователь вводит текст в диалоговом окне редактирования.

Ответ №1:

Где у вас

 if (inputBox.getText() != null)
  

вы устанавливаете str равным null, но проверка InputBox.getText() НЕ равна null; разве это не должно != быть == null ? (Хотя, на самом деле, вам, вероятно, следует проверить inputBox.getText().equals("") .)

Комментарии:

1. Нет, то, что у него есть, верно. Он проверяет, чтобы убедиться, что строка NOT null. .equals будет использоваться для сравнения строк.

2. За исключением того, что если inputBox.getText() == null затем текущий код попытается вызвать, inputBox.getText().toString() который будет null.toString() и завершится.

3. Спасибо, спасибо, спасибо! Такой «Дух!» момент! Мне действительно следовало больше спать прошлой ночью 😉 .