Předvánoční slevová akce PHP týden
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Avatar
Matěj Přerovský:28. října 10:22

Ahoj,
vytvořil jsem jednoduchou android aplikaci, která sčítá dvě čísla a vypíše výsledek. Problém je v tom, že když se tam nezadají čísla nebo jsou větší než int, spadne.

package cz.bofin.skaut;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button addBtn = (Button) findViewById(R.id.addBtn);
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText firstNumEditText = (EditText) findViewById(R.id.firstNumEditText);
                EditText secondNumEditText = (EditText) findViewById(R.id.secondNumEditText);
                TextView resultTextView = (TextView) findViewById(R.id.resultTextView);

                int num1 = Integer.parseInt(firstNumEditText.getText().toString());
                int num2 = Integer.parseInt(secondNumEditText.getText().toString());
                int max = Integer.MAX_VALUE;

                int result = num1 + num2;
                resultTextView.setText(result + "");

            }
        });
    }
}

Zkusil jsem: Zkoušel jsem použít try-catch blok, ale i tak to spadlo.
Díky moc za všechny rady, M

Odpovědět
28. října 10:22
42
Avatar
Odpovídá na Matěj Přerovský
Patrik Valkovič:28. října 11:07

Ahoj, když Integer.parseInt() obalíš do try-catch a zachytíš NumberFormatException, program by padat neměl, pokud není chyba ještě někde jinde.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
28. října 11:07
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Matěj Přerovský:28. října 11:28

Super, díky moc, funguje to :)

Nahoru Odpovědět
28. října 11:28
42
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Matěj Přerovský
Matúš Olejník:28. října 11:29

Ahoj, pre EditText môžeš priamo v xml nastaviť input type na number, numberDecimal alebo numberSigned a dovoliť tak užívateľovi zadať len číslo.
Ak chceš aby mohol zadať aj desatinné záporné čísla môžeš nastaviť

<EditText
    android:inputType="numberDecimal|numberSigned"

A ak chceš aby mohol zadať hocijaké veľké číslo môžeš namiesto integerov používať napr. BigDecimal, najmä keby si chcel počítať s finančnými hodnotami

private BigDecimal getBigDecimalOrDefault(EditText editText, BigDecimal defaultValue){
    return editText.getText() == null ? defaultValue : new BigDecimal(editText.getText().toString());
}

private void sum(){
    BigDecimal firstNumber = getBigDecimalOrDefault(firstNumEditText, BigDecimal.ZERO);
    BigDecimal secondNumber = getBigDecimalOrDefault(secondNumEditText, BigDecimal.ZERO);
    BigDecimal result = firstNumber.add(secondNumber);

    outputTextView.setText("");
    outputTextView.append(result.toString());
}

Alebo ak použiješ double tak len namiesto Integer.parseInt dáš Double.parseDouble s tým že skontroluješ či je v text boxe zadané nejaké čislo.

Nahoru Odpovědět
28. října 11:29
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Matúš Olejník
Matěj Přerovský:28. října 11:30

Super, díky. To xml tam mám, že tam vyskočí klávesnice s čísly. Ale díky :)

Nahoru Odpovědět
28. října 11:30
42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.