Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Matěj Přerovský:28.10.2019 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.10.2019 10:22
42
Avatar
Odpovídá na Matěj Přerovský
Patrik Valkovič:28.10.2019 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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.10.2019 11:07
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Matěj Přerovský:28.10.2019 11:28

Super, díky moc, funguje to :)

Nahoru Odpovědět
28.10.2019 11:28
42
Avatar
Odpovídá na Matěj Přerovský
Matúš Olejník:28.10.2019 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.10.2019 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.10.2019 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.10.2019 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.