Я делаю очень простое приложение, где я помещаю 3 editText
, с целыми положительными числами, и я делаю вычисление. Если я наполняю эти 3 editText
и острие в "считении" идет совсем совершенно, но если я оставляю 1, 2, или 3 пустота отпускает мне ошибку и мое приложение прекращает функционировать.
Как я делаю для того, чтобы, оставив это пустым, он интерпретировал это "0"? Я протестировал уже очень много вещей и ничто... всегда не выходит у меня ошибка и у меня вытекает из приложения... мой код этот:
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_espaciales);
et1 = (EditText) findViewById(R.id.suma1);
et2 = (EditText) findViewById(R.id.suma2);
et3 = (EditText) findViewById(R.id.suma3);
Button sumarsumar = (Button) findViewById(R.id.sumarsumar);
elresultado = (TextView) findViewById(R.id.resultado);
// textMessage = (EditText)findViewById(R.id.textMessage);
//textMessage.addTextChangedListener(watcher);
if (et1.getText().toString().trim().equalsIgnoreCase(""))
et1.setError("This field can not be blank");
if (et2.getText().toString().trim().equalsIgnoreCase(""))
et2.setError("This field can not be blank");
if (et3.getText().toString().trim().equalsIgnoreCase(""))
et3.setError("This field can not be blank");
//c=0;
sumarsumar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double a = Double.valueOf(et1.getText().toString()); // Le saco valor entero y lo pongo en a
double b = Double.valueOf(et2.getText().toString()); // Le saco valor entero y lo pongo en b
double c = Double.valueOf(et3.getText().toString());
double notafinal = a*0.35 + b*0.45+c*0.2; // RESULTADO FINAL
Поскольку вы можете наблюдать, я поместил if(et1.getText().toString()..... )
для того, чтобы пользователь видел в каждый edtiText
один Warning
поскольку которые должны завершать это, если бы не, у них вышла ошибка, но это отчаянное средство, это я это не хочу, хочу, чтобы они это смогли оставлять пустоту
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="49dp"
android:layout_marginTop="70dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="20dp"
android:text=" 2º" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="49dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical|center_horizontal|center"
android:layout_marginLeft="20dp"
android:layout_weight="1"
android:text=" 1º" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="49dp"
android:layout_marginTop="140dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:text=" PRÁCTICAS" />
</LinearLayout>
<EditText
android:id="@+id/suma2"
android:layout_width="175dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linearLayout2"
android:layout_alignRight="@+id/linearLayout2"
android:ems="10"
android:gravity="center_vertical|center"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/suma3"
android:layout_width="169dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linearLayout3"
android:layout_alignRight="@+id/linearLayout3"
android:ems="10"
android:gravity="center_vertical|center"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/suma1"
android:layout_width="166dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/linearLayout1"
android:layout_alignParentRight="true"
android:ems="10"
android:gravity="center_vertical|center"
android:inputType="numberDecimal" />
<Button
android:id="@+id/sumarsumar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/suma3"
android:layout_below="@+id/linearLayout3"
android:layout_marginTop="55dp"
android:text="Button" />
<TextView
android:id="@+id/resultado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/suma1"
android:layout_below="@+id/sumarsumar"
android:layout_marginTop="58dp"
android:text="TextView" />
Очень легкий, я надеюсь, что ты понимаешь меня.
Я сделал похожие приложения и то, что я всегда делаю, когда я делаю Touch
в кнопке мне сделал процесс преобразования.
Сначала ты заявляешь 3 помощника, которые преобразовывали бы все то, что ты писал бы цепи.
Override
public void onClick(View view) {
String auxi=et1.getText().toString();
String auxi2=et2.getText().toString();
String auxi3=et3.getText().toString();
}
После ты добавляешь условие, что если один из 3 EditText
стоимости, которую он берет, 0.
Override
public void onClick(View view) {
String auxi=et1.getText().toString();
String auxi2=et2.getText().toString();
String auxi3=et3.getText().toString();
if(auxi.matches("") //Solo es una acción así que no es necesario las llaves
double a = 0; //Si no hay nada le agregamos 0
else
double a = Integer.parseInt(auxi1); //De lo contrario lo transformamos.
//lo mismo con los otros 2.
if(auxi2.matches("")
double b= 0;
else
double b = Integer.parseInt(auxi2);
if(auxi3.matches("")
double c= 0;
else
double c = Integer.parseInt(auxi3);
//Por ultimo la operación.
double notafinal = a*0.35 + b*0.45+c*0.2; // RESULTADO FINAL
....
}
Уже с там ты это заканчиваешь алгоритм, мой не лучший из мира, но уже для больше "EditText" я использую другие алгоритмы, чтобы улучшать результат.
Так как ты только должен санкционировать что этот пустой txt, и если он состоит итак в том, чтобы он это наполнил с string "0"
Double _default = "0.0";
if(et1.getText().toString().isEmpty()){
et1.setText(Double.Parse(_default));
}
С этим ты наполняешь et1 с 0.0 в случае, если он будет пустым.
Проверка, если EditText пустые, ты это делаешь в заявлении с, что сначала будет всегда пустым, ты должен контролировать EditText в моменте, в котором пользователь нажимает кнопку:
sumarsumar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double a = 0;
//Comprobamos que no estén vacios
if (et1.getText().toString().trim().length() > 0) {
a = Double.valueOf(et1.getText().toString());
} else {
//¿Quieres hacer algo si el usuario no ha añadido nada?
}
...
Таким образом, если пользователь ничего не напишет в назначенном по умолчанию EditText, будет стоимость у 0.
Я вижу, что ты делал сравнение с:
if (et1.getText().toString().trim().equalsIgnoreCase(""))
Ты используешь equalsIgnoreCase, этот метод служит для того, чтобы сравнить две цепи текста опуская, что были прописными или мелкими, например:
if("texto".equalsIgnoreCase("TEXTO"))
Он дал бы как результат TRUE
if("texto".equals("TEXTO"))
Он дал бы как результат FALSE
Если ты только хочешь санкционировать, если он существует или не контент может иметь несколько форм, например:
Чтобы санкционировать, если он не содержит никакого символа:
if(editText.getText().toString().length() == 0 )
//EditText Vacio!
Чтобы санкционировать, если он содержит какой-то символ:
if(editText.getText().toString().length() > 0 )
//EditText contiene algún caracter!
Это была бы версия, которая удаляет место в мишени используя метод trim()
:
if(et1.getText().toString().trim().length() == 0)
//EditText Vacio!
Но я верю в то, что лучший выбор, чтобы санкционировать, если эта опустошила или нет контент EditText
он был бы посредством метода isEmpty ():
if(editText.getText().toString().isEmpty())
//EditText contiene algún caracter!