С риском звучать как настоящий старик, это похоже на твою домашнюю работу в колледже ... Так ли это?
Ваш код изменился с тех пор, как задал вопрос, что затрудняет ответ!К счастью, мне удалось скрести ваш код в Eclipse до того, как вы его изменили ... Во всяком случае, в исходном коде вы выполняли все свои операции в методе create, и в этот момент вы не ввели значение для edittext1 (если не установлено какое-либо значение).разумное значение по умолчанию, которое, как я полагаю, будет 0, следовательно, всегда получая ноль в качестве вашего ответа?)
// Whilst setting up a view the create method will not have a
// reasonable value for edittext1 - or it will be your default
String stringInput = (edittext1.getText().toString());
if (stringInput.isEmpty()) {
doubleInput = 0.0; // Will always enter this line
} else {
doubleInput = Double.parseDouble(edittext1.getText().toString());
}
Вы продублировали код ...
output1 = (TextView) findViewById(R.id.output1);
На самом деле вывод от 1 доoutput10 (т.е. все десять строк) дублируются.
Что касается обновленного кода, это все еще вызывает проблемы?Вы уверены, что stringInput имеет значение?Я имею в виду, вы что-то набрали?Вы можете проверить это путем отладки вашей программы.
Следующее также подвержено ошибкам, как предполагает FloatingCoder, и может привести к поломке ...
doubleInput = Double.parseDouble(edittext1.getText().toString());
Лучший способ сделать это (потому чтоон ловит исключение, которое может выдавать Java)
doubleInput = 0.0;
String inputStr = question.getText().toString();
try {
doubleInput = Double.parseDouble(inputStr);
} catch (NumberFormatException e) {
// This should probably do something more useful? i.e. tell
// the user what they've done wrong...
Log.e("Android",
"Double throws a NumberFormatException if you enter text that is not a number");
}
О, а в Android есть несколько вспомогательных утилит для проверки строк, см. TextUtils или просто мой пример ...
if (!TextUtils.isEmpty(inputStr)) { // checks for "" and null (see documentation)
doubleInput = Double.parseDouble(inputStr);
}
IНАСТОЯТЕЛЬНО рекомендую написать простой контрольный пример для вычисления, которое выглядит неверно, потому что два текстовых поля и кнопка действительно не сложны, и их очень легко отлаживать без необходимости мешать всем счетчикам.Во всяком случае, надеюсь, что это помогло, о, и мой полный пример с двумя edittexts и кнопкой, я просто опубликую это здесь ... Надеюсь, это поможет ...
private Button btnCalc;
private EditText question, answer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
answer = (EditText) findViewById(R.id.answer);
question = (EditText) findViewById(R.id.question);
btnCalc = (Button) findViewById(R.id.btnCalc);
// The OnClickListener here will be executed outside the "Create",
// i.e., when you actually click on the button, which will give you
// a chance to enter some values in the question edittext...
btnCalc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
double in = 0.0;
try {
String inputStr = question.getText().toString();
// if you want to check it use
if (!TextUtils.isEmpty(inputStr)) {
in = Double.parseDouble(inputStr);
}
} catch (NumberFormatException e) {
// This should probably do something more useful? i.e. tell
// the user what they've done wrong...
Log.e("Android",
"Double throws a NumberFormatException if you enter text that is not a number");
}
double miles = in * 1.6;
answer.setText(String.valueOf(miles));
}
});
}