Pusty EditText Android Studio

0

Witam, problem mam taki jak w temacie. Od około miesiąca tworzę swoją pierwszą aplikację w Android Studio. Moja znajomość javy jest podstawowa i na razie się jeszcze uczę. Rozwiązania problemu nie znalazłem na żadnym polski, ani zagranicznym forum, ale może źle szukałem. Otóż, moja aplikacja głównie liczy. Na przykład jest funkcja obliczająca sumę ciągu. Problem jest taki, że jeśli użytkownik nie wpisze liczby w polu Edit Text, to się crashuje.
Wszystkie odpowiedzi jakie znalazłem, tyczyły się tylko EditText, które za zmienne przyjmowały typ String.
Ja natomiast mam tym double i żaden ze sposobów nie działa. Próbowałem z:

`if(zmienna.length()==0)
{ zmienna.setError("coś");}

if(zmienna.getText().toString()=="")
{zmienna.setError("coś");}

if(zmienna.getText().toString().equals("")
{zmienna.setError("coś");}`

Funkcja isEmpty nie działa dla float/double. Jak mogę sobie z tym poradzić?

0

Można się bawić w sprawdzanie czy to, co wpisał użytkownik jest liczbą albo ustawić filtry na EditText, ale jest to raczej niepraktyczne w tym przypadku. Lepiej ustaw po prostu w layoucie inputType=numberDecimal. W ten sposób klawiatura podczas wpisywanie do tego konkretnego pola, będzie pozwalać na wprowadzanie tylko liczb zmiennoprzecinkowych.

<EditText
    android:id="@+id/my_edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"  />

EDIT:

Ups... źle zrozumiałem problem chyba. Tak jak ktoś napisał TextUtils.isEmpty().

0

TextUtils.isEmpty(editTextView.getText())

0
Michał Sikora napisał(a):

Można się bawić w sprawdzanie czy to, co wpisał użytkownik jest liczbą albo ustawić filtry na EditText, ale jest to raczej niepraktyczne w tym przypadku. Lepiej ustaw po prostu w layoucie inputType=numberDecimal. W ten sposób klawiatura podczas wpisywanie do tego konkretnego pola, będzie pozwalać na wprowadzanie tylko liczb zmiennoprzecinkowych.

<EditText
    android:id="@+id/my_edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"  />

Tak, tę funkcję znam. Chodzi mi bardziej o to, kiedy użytkownik nic nie poda

0
Ponton napisał(a):

TextUtils.isEmpty(editTextView.getText())

Niestety nie działa :/

0

Pokaż większy fragment kodu, bo bez tego to tak średnio. Możesz sprawdzić ewentualnie jeszcze TextUtils.isEmpty(editTextView.getText().toString().trim()) jak coś.

0

Na to już wpadłem, jednak ciągle crashuje z komunikatem "Unfortunately aplication has stopped".
Rozumiem, że editTextView to nazwa mojej zmiennej?

0

editTextView to nazwa zmiennej, do której jest przypisany EditText, który chcesz sprawdzić. Więc prawdopodbnie tak.

Skopiuj i wklej większy kawałek kodu oraz treść crasha.

0

`
an1 = Float.parseFloat(an.getText().toString());
ak1 = Float.parseFloat(ak.getText().toString());
n1 = Float.parseFloat(n.getText().toString());
k1 = Float.parseFloat(k.getText().toString());

            if(TextUtils.isEmpty(n.getText().toString().trim()))
                n.setError("n cannot be empty"); `

"Unfortunately aplication has stopped" to cały komunikat w emulatorze.

1

Trochę ciężko się to czyta, ale kolejność operacji jest zła. Przypisanie do swoich zmiennych musisz zrobić dopiero PO warunku. Czyli.

if(TextUtils.isEmpty(n.getText().toString().trim())) {
  n.setError("n cannot be empty");
  return; // Tutaj ciężko zgadywać jak należy wrócić, bo nie ma wklejonej całej metody.
}
an1 = Float.parseFloat(an.getText().toString());
ak1 = Float.parseFloat(ak.getText().toString());
n1 = Float.parseFloat(n.getText().toString());
k1 = Float.parseFloat(k.getText().toString());

Poza tym widzę, że w warunku sprawdzasz treść tekstu w zmiennej n, a potem używasz czegoś takiego jak an do oczytania tekstu. Czyli prawdopodbnie dwa zupełnie inne obiekty.

Nie chodzi o komunikat jaki pojawia się na telefonie tylko co wypluwa Ci logcat i jak wygląda stack trace. Jeżeli nie wiesz o czym mówię, to musisz doczytać.

0
Michał Sikora napisał(a):

Trochę ciężko się to czyta, ale kolejność operacji jest zła. Przypisanie do swoich zmiennych musisz zrobić dopiero PO warunku. Czyli.

if(TextUtils.isEmpty(n.getText().toString().trim())) {
  n.setError("n cannot be empty");
  return; // Tutaj ciężko zgadywać jak należy wrócić, bo nie ma wklejonej całej metody.
}
an1 = Float.parseFloat(an.getText().toString());
ak1 = Float.parseFloat(ak.getText().toString());
n1 = Float.parseFloat(n.getText().toString());
k1 = Float.parseFloat(k.getText().toString());

Poza tym widzę, że w warunku sprawdzasz treść tekstu w zmiennej n, a potem używasz czegoś takiego jak an do oczytania tekstu. Czyli prawdopodbnie dwa zupełnie inne obiekty.

Nie chodzi o komunikat jaki pojawia się na telefonie tylko co wypluwa Ci logcat i jak wygląda stack trace. Jeżeli nie wiesz o czym mówię, to musisz doczytać.

Działa! Wielkie dzięki ;). Byłem przekonany o prawidłowej kolejności, ale na szczęście są mądrzejsi ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1