2014-06-13 2 views
-2

Я использую eclipse для приложения Android, и пользователи вводят значение, которое используется в формуле. Когда они не введут значение, оно выйдет из строя, поэтому я хочу, чтобы любые пустые входы менялись на нули. Heres код у меня есть:Преобразование пустого ввода в ноль?

EditText numAA=(EditText)findViewById(R.id.numAAAn); 
Double num1=Double.parseDouble(numAA.getText().toString()); 
if ((EditText)findViewById(R.id.numAAAn) == null) { 
    numAA=0; 
} 

И это имеет ошибку на 0, что говорит «несоответствие типов: невозможно преобразовать из INT в EditText» так им предполагая, что он хочет, чтобы он конвертируется, но им не уверен, как это сделать. Я устал добавлять котировки вокруг 0, но это тоже не сработало.

+3

вы должны установить значение 'EditText' как numAA.setText (« 0 »). – iMBMT

ответ

2

Перед разоблачением двойного кода проверьте, нет ли numAA или null. Если он затем присваивает значение по умолчанию.

Это мое решение:

Double num1 = 0.0; // Default value.. 
EditText numAA = (EditText) findViewById(R.id.numAAAn); 

if (numAA.getText() != null && numAA.length() != 0) { 
    num1 = Double.parseDouble(numAA.getText().toString()); 
} else { 
    numAA.setText("0"); 
} 

Вы можете создать отдельную функцию для выполнения этой операции. Как:

public Double parseInput(Double defaultValue, EditText editText) { 
    if (editText.getText() != null && editText.length() != 0) { 
     return Double.parseDouble(editText.getText().toString()); 
    } else { 
     editText.setText("0"); 
    } 
    return defaultValue; 
} 

И от абонента, использовать его как:

Double num1 = parseInput(0.0, (EditText) findViewById(R.id.numAAAn)); 
+0

Я думаю, что это лучший ответ, поскольку он правильно проверяет, имеет ли значение EditText значение null перед его использованием. Это можно было бы улучшить, изменив оператор if: if (numAA! = Null), который уменьшил бы накладные расходы, связанные с findViewById() и произнесением дважды. – panini

+0

ОК. У меня есть 20 входов. Есть ли способ включить все эти входы в один оператор if или я должен сделать 20 отдельных заявлений? – user3688499

+0

@ user3688499 Вы можете создать отдельную функцию для выполнения этой проверки. Если все ожидаются «Double», то это очень просто. – Ambrish

0
int counter=0; 
EditText numAA=(EditText)findViewById(R.id.numAAAn); 
Double num1=Double.parseDouble(numAA.getText().toString()); 
if ((EditText)findViewById(R.id.numAAAn) == null) { 
    numAA.setText(counter+""); 
} 

попробовать это:

+1

этот код будет вызывать NPE, если numAA является нулевым, поскольку нулевая проверка выполняется после вызова метода numAA – panini

+0

ok. У меня есть 20 входов. Есть ли способ включить все эти входы в один оператор if или я должен сделать 20 отдельных заявлений? – user3688499

0

Попробуйте следующий код:

EditText numAA=(EditText)findViewById(R.id.numAAAn); 
    if (numAA.length()==0) { 
     numAA.setText("0");//or if you want nothing to show in the edittext, leave this one blank 
    } else { 
     Double num1=Double.parseDouble(numAA.getText().toString()); 
    } 
} 

length() метод проверяет длину строка внутри edittext.

+0

это дает ошибку, указывающую, что edittext и int не совместимы. – user3688499

+0

см. Мой отредактированный пост – kgandroid

+0

Вам также нужно позаботиться о области переменной num1. – Ambrish

Смежные вопросы