EditText не может получить данные, давая нулевую строку

Проблема в том, что (в FirstPage.java) getText() считывает нулевую строку из EditText, а не значение, которое я ввожу. Как только приложение запускается, т.е. начинается действие FirstPage, текст редактирования захватывает нулевую строку, а затем все, что я ввожу впоследствии в этом поле, не учитывается. И затем, когда нажата кнопка с именем click, записывается только нулевая строка и, следовательно, всегда возникает исключение NumberFormat Exception. Как это решить?

Код: (FirstPage.java)

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_page);

        Click = findViewById(R.id.click);
        Text = findViewById(R.id.text);
        try {
            number = Integer.parseInt(Text.getText().toString());
        }catch (NumberFormatException e){
                   number = 2; //the problem is here getText() is always getting null string
                   //and hence catch statement is always getting executed
        }

        Click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent ii= new Intent(FirstPage.this, MainActivity.class);
                ii.putExtra("value", number);
                startActivity(ii);
            }
        });
    }

XML-код для FirstPage.java:

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical"
    tools:context = ".FirstPage">
    <EditText
        android:id = "@+id/text"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center"
        android:textSize = "20dp"
        android:hint = "Enter no of ques"
        android:layout_marginTop = "30dp"/>
    <Button
        android:id = "@+id/click"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center"
        android:layout_marginTop = "20dp"
        android:text = "Click"/>
</LinearLayout>

Часть кода MainActivity.class:

Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            value = bundle.getInt("value");
        }

Я не могу понять, что именно я делаю неправильно, пожалуйста, помогите. Заранее благодарны за Вашу помощь.

Добро пожаловать в переполнение стека! Я предполагаю, что это ожидаемое поведение для метода «при создании» для захвата нуля ... что, если вы попытаетесь проанализировать число из этой строки в прослушивателе «по щелчку»?

seninp 26.12.2020 17:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
342
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы как-то неправильно пишете. Блок try-catch должен быть внутри setOnClickListener, потому что строка используется только при нажатии кнопки. Таким образом, вы должны написать это таким образом.

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_page);

    Click = findViewById(R.id.click);
    Text = findViewById(R.id.text);
   
    Click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                 number = Integer.parseInt(Text.getText().toString());
            } catch (NumberFormatException e){
                 number = 2; 
            }
            Intent ii= new Intent(FirstPage.this, MainActivity.class);
            ii.putExtra("value", number);
            startActivity(ii);
        }
    });
}

Другие вопросы по теме