Не получать значение из TextInputLayout, когда пользователь вводит ввод

#java #android #material-design

#java #Android #материал-дизайн

Вопрос:

Я пытаюсь получить некоторый пользовательский ввод, используя material design, например, информацию о росте, весе, возрасте и поле. Когда пользователь нажимает кнопку seeDietChart, система вычисляет и показывает bmi и bmr. Когда я даю ввод в TextInputLayout, приложение запускается, но не получает никакого значения, а поле остается пустым. Вот xml файл

     <com.google.android.material.textfield.TextInputLayout
        android:id="@ id/height"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="Enter your height in meter"
        >
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            />

    </com.google.android.material.textfield.TextInputLayout>
    <com.google.android.material.textfield.TextInputLayout
        android:id="@ id/weight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="Enter your weight in kg"
        >
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            />

    </com.google.android.material.textfield.TextInputLayout>
    <com.google.android.material.textfield.TextInputLayout
        android:id="@ id/age"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="Enter your age"
        >
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            />

    </com.google.android.material.textfield.TextInputLayout>
    <com.google.android.material.textfield.TextInputLayout
        android:id="@ id/gender"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="Your gender"
        >
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            />

    </com.google.android.material.textfield.TextInputLayout>
 

После ввода переменная остается пустой. Я попытался распечатать полученное значение, используя Log.i и всплывающее сообщение. Сообщение о тосте пустое. Вот java код

     txtHeight = findViewById(R.id.height);
    heightString = txtHeight.getEditText().getText().toString();

    txtWeight = findViewById(R.id.weight);
    weightString = txtWeight.getEditText().getText().toString();

    txtAge = findViewById(R.id.age);
    ageString = txtAge.getEditText().getText().toString();

    txtGender = findViewById(R.id.gender);
    gender = Objects.requireNonNull(txtGender.getEditText()).getText().toString();

    Log.i("Height", heightString);
    Log.i("Weight", weightString);
    Log.i("Age", ageString);
    Toast.makeText(getApplicationContext(), heightString, Toast.LENGTH_LONG).show();
 

Как я могу решить эту проблему?

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

1. ваши идентификаторы просмотра txtGender txtHeight и так далее. Вы не получаете NPE?

2. Я получил сообщение об ошибке. Теперь я обновил идентификаторы представления.

3. Эй, вы должны установить идентификатор для TextInputEditText и использовать его, чтобы присвоить ему значение переменной в Java (findViewById). Это не имя переменной в java, которое имеет значение. Важно то, что идентификатор в xml используется в R.id.name_of_id.

4. Один TextInputLayout содержит один TextInputEditText . Я устанавливаю идентификатор для каждого TextInputLayout. Я только что обновил xml. Не могли бы вы проверить и сообщить мне, все ли в порядке?

5. @JahidHasan вместо этого попробуйте добавить идентификаторы edittext и использовать их напрямую?

Ответ №1:

Когда выполняется код, изначально текстовые поля пусты. Вот почему он не получает никакого значения. Чтобы получить значение, нам нужно использовать кнопку и использовать метод TextBox.getText() внутри кнопки. Это работает отлично.

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String value = txtHeight.getText().toString();
            }
        });