• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z emulacja programu

Object Storage Arubacloud
0 głosów
171 wizyt
pytanie zadane 8 grudnia 2022 w Java przez koko200307 Nowicjusz (160 p.)

Witam, stworzyłem swój program do przeliczania walut, lecz emulator wyłącza aplikacje gdy chcę go uruchomić. Kompilator nie pokazuje błędów.

package com.example.projekt;

import static java.lang.Float.parseFloat;

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 {
    TextView sprzedaz,skup,tekst;
    Button dolar,funt,frank;
    EditText edytuj;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sprzedaz=findViewById(R.id.sprzedaz);
        skup=findViewById(R.id.skup);
        dolar=findViewById(R.id.dolar);
        funt=findViewById(R.id.funt);
        frank=findViewById(R.id.frank);
        edytuj.findViewById(R.id.edytuj);
        tekst.findViewById(R.id.tekst);
    }

public void dolar(View xyz) {
    dolar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            float cena = parseFloat(edytuj.getText().toString());
            float cenaskupu = (float) (cena * 4.46);
            float cenasprzedazy =(float) (cena * 4.49);
            if (cena > 0)
            {
                sprzedaz.setText(String.valueOf(cenaskupu));
                skup.setText(String.valueOf(cenasprzedazy));
                tekst.setText("Jest ok!");
            }
            else
            {
                tekst.setText("Podaj liczby powyżej zera!");
            }
        }

        public void funt(View xyz2) {
            funt.setOnClickListener(view2 -> {
                float cena = parseFloat(edytuj.getText().toString());
                float cenaskupu = (float) (cena * 5.40);
                float cenasprzedazy =(float) (cena * 5.44);
                if (cena > 0)
                {
                    sprzedaz.setText(String.valueOf(cenaskupu));
                    skup.setText(String.valueOf(cenasprzedazy));
                    tekst.setText("Jest ok!");
                }
                else
                {
                    tekst.setText("Podaj liczby powyżej zera!");
                }
            });
        }

        public void frank(View xyz3) {
            frank.setOnClickListener((View view) -> {

                float cena = parseFloat(edytuj.getText().toString());
                float cenaskupu =(float) ( cena * 4.74);
                float cenasprzedazy =(float)  (cena * 4.78);
                if (cena > 0)
                {
                    sprzedaz.setText(String.valueOf(cenaskupu));
                    skup.setText(String.valueOf(cenasprzedazy));
                    tekst.setText("Jest ok!");
                }
                else
                {
                    tekst.setText("Podaj liczby powyżej zera!");
                }
            });
        }
    });
}
}








 

1 odpowiedź

0 głosów
odpowiedź 8 grudnia 2022 przez VBService Ekspert (252,740 p.)
edycja 8 grudnia 2022 przez VBService

IMO błąd jest tutaj

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sprzedaz=findViewById(R.id.sprzedaz);
        skup=findViewById(R.id.skup);
        dolar=findViewById(R.id.dolar);
        funt=findViewById(R.id.funt);
        frank=findViewById(R.id.frank);
        edytuj.findViewById(R.id.edytuj);
        tekst.findViewById(R.id.tekst);
    }

popraw na

...

edytuj = findViewById(R.id.edytuj);
tekst = findViewById(R.id.tekst);

 

no i zagnieżdżenie metod dolar(), funt() i frank() w metodzie dolar() też może powodować problem.

Zapisałbym to tak

...

public class MainActivity extends AppCompatActivity {
    TextView sprzedaz,skup,tekst;
    Button dolar,funt,frank;
    EditText edytuj;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sprzedaz = findViewById(R.id.sprzedaz);
            skup = findViewById(R.id.skup);
           dolar = findViewById(R.id.dolar);
            funt = findViewById(R.id.funt);
           frank = findViewById(R.id.frank);
          edytuj = findViewById(R.id.edytuj);
           tekst = findViewById(R.id.tekst);

        dolar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                float cena = parseFloat(edytuj.getText().toString());
                float cenaskupu = (float)(cena * 4.46);
                float cenasprzedazy = (float)(cena * 4.49);
                if (cena > 0)
                {
                    sprzedaz.setText(String.valueOf(cenaskupu));
                    skup.setText(String.valueOf(cenasprzedazy));
                    tekst.setText("Jest ok!");
                }
                else
                {
                    tekst.setText("Podaj liczby powyżej zera!");
                }
            }
        });

        funt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                float cena = parseFloat(edytuj.getText().toString());
                float cenaskupu = (float)(cena * 5.40);
                float cenasprzedazy = (float)(cena * 5.44);
                if (cena > 0)
                {
                    sprzedaz.setText(String.valueOf(cenaskupu));
                    skup.setText(String.valueOf(cenasprzedazy));
                    tekst.setText("Jest ok!");
                }
                else
                {
                    tekst.setText("Podaj liczby powyżej zera!");
                }
            }
        });

        frank.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                float cena = parseFloat(edytuj.getText().toString());
                float cenaskupu = (float)( cena * 4.74);
                float cenasprzedazy = (float)(cena * 4.78);
                if (cena > 0)
                {
                    sprzedaz.setText(String.valueOf(cenaskupu));
                    skup.setText(String.valueOf(cenasprzedazy));
                    tekst.setText("Jest ok!");
                }
                else
                {
                    tekst.setText("Podaj liczby powyżej zera!");
                }
            }
        });
    }
}

 

1
komentarz 8 grudnia 2022 przez koko200307 Nowicjusz (160 p.)
Dziękuję, działa. Chciałbym się jeszcze zapytać co zrobić, gdy w przypadku wpisania znaków lub liczby poniżej 0 w tekście na samym dole wyświetlało komunikat. Gdy wpiszę coś innego niż liczba to program wyłącza się
komentarz 8 grudnia 2022 przez VBService Ekspert (252,740 p.)
edycja 8 grudnia 2022 przez VBService

Czy o to Tobie chodzi?

edytuj.setOnKeyListener((view, keyCode, event) -> {
    if (event.getAction() == KeyEvent.ACTION_DOWN)
    {
        // sprawdź, czy wartość wpisana przez użytkownika jest poprawna i wyświetl odpowiedni komunikat
        if (parseFloat(edytuj.getText().toString()) <= 0)
        {
            tekst.setText("Podaj liczbę powyżej zera!");
        }
        else
        {
            tekst.setText("");
        }

        return true;
    }

    return false;
});

lub

edytuj.setOnKeyListener((view, keyCode, event) -> {
    if (event.getAction() == KeyEvent.ACTION_DOWN)
    {
        // sprawdź, czy wartość wpisana przez użytkownika jest poprawna i wyświetl odpowiedni komunikat
        if (parseFloat(edytuj.getText().toString()) <= 0)
        {
            tekst.setText("Podaj liczbę powyżej zera!");
        }
        else 
        { 
            tekst.setText("");
        }
    }

    return false;
});

 

Różnica pomiędzy drugim zapisem a poprzednim jest taka, że w tym przypadku metoda onKey zwraca wartość false, co oznacza, że zdarzenie nie zostało obsłużone i może być przekazane do innego listenera lub innej metody obsługi zdarzenia. W poprzednim przypadku metoda onKey zwracała wartość true, co oznacza, że zdarzenie zostało obsłużone i nie jest przekazywane dalej.

 

Pamiętaj, że jeśli użyjesz tego rozwiązania, to musisz dodać odpowiedni import klasy KeyEvent

import android.view.KeyEvent;

 

komentarz 8 grudnia 2022 przez koko200307 Nowicjusz (160 p.)
Chodzi o to, że jeśli zamiast liczby wpiszę litery to zamyka aplikację. Jak to usunąć?

Podobne pytania

+1 głos
1 odpowiedź 166 wizyt
pytanie zadane 28 maja 2020 w C i C++ przez Majster6918 Gaduła (4,030 p.)
+1 głos
2 odpowiedzi 1,244 wizyt
0 głosów
1 odpowiedź 404 wizyt
pytanie zadane 8 grudnia 2019 w Java przez mm Użytkownik (890 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...