Skocz do zawartości
daktarin

[android studio] Linijka powodująca zawieszanie się aplikacji

    Rekomendowane odpowiedzi

    Witajcie,

    piszę bardzo prostą apkę, w której muszę pobrać z pola EditText wartość, i przekonwertować ją na Double (czyli zmiana Stringa na Double).

    Przeliczenia te mam podpięte pod funkcję onTextChanged.

    Kiedy mam kod:

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    
    
    TextView textView1 = (TextView) findViewById(R.id.textView);
    EditText editText1 = (EditText) findViewById(R.id.editTextWzrost);
    EditText editText2 = (EditText) findViewById(R.id.editTextWaga);
    
    String tempLicznikTxt;
    tempLicznikTxt = editText2.getText().toString();
    
    // double licznikDouble = Double.parseDouble(tempLicznikTxt);
    
    }

    apka działa.

     

    Jeśli odkomentuje linijkę:

    double licznikDouble = Double.parseDouble(tempLicznikTxt);

    apka po uruchomieniu i próbie wpisania czegokolwiek do pola EditText zatrzymuje sie z komunikatem "... została zatrzymana".

     

    Dodam tylko, że testuje całość na fizycznym urządzeniu SG 5

     

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Coderoid
    Napisano (edytowane)

    A co tam wpisujesz? Jesteś pewny że wpisujesz tam wartość która może być double? Poza tym masz to w onTextChanged, a o ile się nie mylę, przestawienie kursora na to pole już jest wywołaniem akcji z onTextChanged, więc pusty tekst nie będzie double.

    Edytowane przez panryz

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Wpisuję same cyfry. Pobieram je w postaci Stringa i tego Stronga konwertuje (a przynajmniej próbuję) na Double...

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    A przestawiłeś EditText tak, by przyjmował tylko liczby?
    A poza tym, według mnie, tempLicznikTxt powinien na start mieć jakąś ustaloną z góry wartość, na przykład 0, bo na aktualna chwilę ma wartość null, co wywala ci program przy konwersji ze Stringa na Double.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Tak, pola Edit Text mają ustawione

    android:inputType="number"

    Dałem teraz kod:

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    
    
    TextView textView1 = (TextView) findViewById(R.id.textView);
    EditText editText1 = (EditText) findViewById(R.id.editTextWzrost);
    EditText editText2 = (EditText) findViewById(R.id.editTextWaga);
    
    String tempLicznikTxt = "0";
    tempLicznikTxt = editText2.getText().toString();
    
    double licznikDouble = Double.parseDouble(tempLicznikTxt);
    
    }

    i dalej wywala....

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    TextView textView1 = (TextView) findViewById(R.id.textView);
    EditText editText1 = (EditText) findViewById(R.id.editTextWzrost);
    EditText editText2 = (EditText) findViewById(R.id.editTextWaga);
    

    Co to robi w onTextChanged?

    Nie powinno to być w OnCreate?

    [Dodano: 09 maj 2016 - 15:10]

    Odpaliłem twój kod z przeróbkami (przypisanie elementów interfejsu umieściłem w onCreate) i działa normalnie, tylko wywala się przy pustym edittext. Poza tym, wrzuć logi.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Docelowo w ma się wyświetlać w textView1 wartość bmi, obliczanego na bieżąco przy zmianach w Edit Textach.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Coderoid

    Zapewne rzuca Ci takim exceptionem  java.lang.NumberFormatException: Invalid double: ""

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    senega
    Napisano (edytowane)

    Nie chodziło o to przypisanie.

     

     

    EditText editText2 = (EditText) findViewById(R.id.editTextWaga);

    String tempLicznikTxt = "0";

    tempLicznikTxt = editText2.getText().toString();

    double licznikDouble = Double.parseDouble(tempLicznikTxt);

     

    W tym przypadku podstawienie 0 nic nie daje bo zaraz próbujesz nadpisać wartością z pola tekstowego. To pole tekstowe powinno być zainicjowane wartością "0" w onCreate().

    Edytowane przez senega

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Nie chodziło o to przypisanie.

    EditText editText2 = (EditText) findViewById(R.id.editTextWaga);

    String tempLicznikTxt = "0";

    tempLicznikTxt = editText2.getText().toString();

    W tym przypadku podstawienie 0 nic nie daje bo zaraz próbujesz nadpisać wartością z pola tekstowego. To pole tekstowe powinno być zainicjowane wartością "0" w onCreate().

    Senega, a jakim kodem to zainicjować?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x