Я создаю простое приложение для преобразования единиц измерения для Android на Java, используя EditText, Spinner, Button и TextView. Пользовательский интерфейс загружается правильно, но когда я нажимаю кнопку Преобразовать, ничего не происходит — ни ошибок, ни вывода, ни видимых изменений в поле результата.
Вот что я уже проверил и заметил:
Вероятные причины (частые):
- Обработчик пользовательского интерфейса не подключен — кнопка onClick или Идентификаторы findViewById могут не совпадать с идентификаторами макета.
- Проблема синтаксического анализа — проблема с пустым вводом или десятичным разделителем, вызывающая молчаливое исключение NumberFormatException.
- Представление результатов не обновляется в потоке пользовательского интерфейса.
- Логика преобразования возвращает 0 или неправильные ключи единиц измерения.
- Исключения обнаруживаются и игнорируются (нет видимого журнала).
- Проверенные идентификаторы в макете setContentView соответствуют вызовам findViewById.
- Гарантированный setOnClickListener действительно установлен для кнопки.
- Обрезанные и проверенные входные данные перед анализом ().
Код: Выделить всё
Double.parseDouble - Проверено логарифмическое сообщение — видимых исключений нет.
- Подтвержденные счетчики возвращают действительные строковые значения для логики преобразования.
Вот пример, который работает должным образом (метры ↔ километры) для справки:
Активность Java:
Код: Выделить всё
package com.example.unitconverter;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
public class UnitConverterActivity extends AppCompatActivity {
private EditText input;
private Spinner fromUnit, toUnit;
private TextView result;
private Button convertBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = findViewById(R.id.input_value);
fromUnit = findViewById(R.id.spinner_from);
toUnit = findViewById(R.id.spinner_to);
result = findViewById(R.id.text_result);
convertBtn = findViewById(R.id.button_convert);
String[] units = { "meters", "kilometers" };
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, units);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fromUnit.setAdapter(adapter);
toUnit.setAdapter(adapter);
convertBtn.setOnClickListener(v -> {
String raw = input.getText().toString().trim();
if (raw.isEmpty()) {
result.setText("Enter a value");
return;
}
double value;
try {
value = Double.parseDouble(raw);
} catch (NumberFormatException e) {
result.setText("Invalid number");
return;
}
String from = (String) fromUnit.getSelectedItem();
String to = (String) toUnit.getSelectedItem();
double out = convert(value, from, to);
result.setText(String.valueOf(out));
});
}
private double convert(double value, String from, String to) {
if (from.equals(to)) return value;
if (from.equals("meters") && to.equals("kilometers")) return value / 1000.0;
if (from.equals("kilometers") && to.equals("meters")) return value * 1000.0;
return value;
}
}
Код: Выделить всё
activity_main.xmlКод: Выделить всё
Что может привести к тому, что событие нажатия кнопки «Преобразовать» не обновит результат в моем приложении конвертера единиц Android, даже если макет и логика кажутся правильными?
Каковы наиболее распространенные ошибки или неправильные настройки, которые мешают setOnClickListener запустить или обновить пользовательский интерфейс?
Подробнее здесь: https://stackoverflow.com/questions/798 ... d-result-w
Мобильная версия