Skocz do zawartości
EmAndEm

Co poprawić w kodzie aby działało wszystko zgodnie z kolejnością

    Rekomendowane odpowiedzi

    Napisano (edytowane)

    Cześć, 

    zacząłem naukę Androida i natknąłem się na kilka problemów. Może najpierw zarysuję co chciałbym osiągnąć:

    1) Użytkownik wpisuje swoje dane ( wiek, wzrost, waga )

    *wiek narazie jest wpisywany jako faktyczny wiek, a nie jak sugeruje hint jako rok urodzenia

    2) Użytkownik wybiera płeć - w tym miejscu następuje przeliczenie głównej wartości - ppm

    3) Użytkownik wybiera aktywność fizyczną - w tym miejscu następuje przeliczenie cpm - na podstawie pobranej z ptk 2) ppm

    4) Użytkownik wybiera swoją dietę - tu nastąpi wyliczenie zapotrzebowania na poszczególne makroskładniki ( białko, tłuszcz, węglowodany ) na podstawie cpm

    5) Po kliknięciu przycisku otworzy się nowe Activity w którym na TextView ukaże się informacja o: ppm, cpm, makroskładnikach, /ewentualnie moga być też przesłane dane na temat wpisanych wartości tj. wiek, waga, wzrost/

     

    Moje problemy:

    1) Nie potrafię napisać kodu tak, aby wszystko wykonywało się zgodnie z kolejnością. Część instrukcji ( przynajmniej tak poznajdowałem w różnych poradnikach na internecie ) musi być wykonana w onCreate, a to powoduje u mnie kłopot bo miesza w kolejności i trzeba się naklikać po kilka razy, żeby faktycznie obliczyło wartość.

    Tutaj jest kod z MainActivity.java: 

    Spoiler

     

    
    package com.example.maronzo.aplikacjaandroid2019zaliczenie;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioGroup;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    
        private EditText wiek;
        private EditText waga;
        private double ppm;
        private int age;
        private double weight;
        private TextView resluts;
        private RadioGroup sexGrp;
        private double cpm;
        Object value;
    
        Button btn1;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            wiek = (EditText) findViewById(R.id.podajDateUrodzenia);
            waga = (EditText) findViewById(R.id.podajWage);
            btn1 = (Button) findViewById(R.id.przejdzDalej2);
            resluts = (TextView) findViewById(R.id.textViewaaaaaa);
            sexGrp = (RadioGroup) findViewById(R.id.sexGroup);
            Spinner spinner = findViewById(R.id.spinner2);
    
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.numbers2, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(this);
    
    
    
    
            sexGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    getAgeAndWeight();
                    if (checkedId == R.id.plecMezczyzna) {
                        if (age < 3) {
                            ppm = (59.512 * weight) - 30.4;
                        } else if ((age >= 3) & (age < 10)) {
                            ppm = (22.706 * weight) + 504.3;
                        } else if ((age >= 10) & (age < 18)) {
                            ppm = (17.686 * weight) + 658.20;
                        } else if ((age >= 18) & (age < 30)) {
                            ppm = (15.057 * weight) + 692.20;
                        } else if ((age >= 30) & (age < 60)) {
                            ppm = (11.472 * weight) + 873.10;
                        } else if (age > 60) {
                            ppm = (11.711 * weight) + 587.70;
                        }
                    }
                    if (checkedId == R.id.plecKobieta) {
                        if (age < 3) {
                            ppm = (58.317 * weight) - 31.10;
                        } else if ((age >= 3) & (age < 10)) {
                            ppm = (20.315 * weight) + 485.90;
                        } else if ((age >= 10) & (age < 18)) {
                            ppm = (13.384 * weight) + 692.60;
                        } else if ((age >= 18) & (age < 30)) {
                            ppm = (14.818 * weight) + 486.60;
                        } else if ((age >= 30) & (age < 60)) {
                            ppm = (8.126 * weight) + 845.60;
                        } else if (age > 60) {
                            ppm = (9.082 * weight) + 658.50;
                        }
                    }
                }
            });
    
        }
    
        public void getAgeAndWeight() {
    
            String wiekStr = wiek.getText().toString();
            String wagaStr = waga.getText().toString();
    
    
            weight = Double.parseDouble(wagaStr);
    
            age = Integer.parseInt(wiekStr);
        }
    
    
        public void click(View view) {
            getAgeAndWeight();
            Intent intent = new Intent(this, Main2Activity.class);
            intent.putExtra(String.valueOf(Main2Activity.ppm2Activ), ppm);
            intent.putExtra(String.valueOf(Main2Activity.cpm2Activ), cpm);
            startActivity(intent);
        }
    
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            value = parent.getItemAtPosition(position);
            TextView aktywnoscFiz = (TextView) findViewById(R.id.opisAktywnosciFizycznej);
            switch (position) {
                case 0:
                    resluts.setText("1 - Pacjent chory lezacy w lozku");
                    cpm = ppm * 1.25;
                    break;
                case 1:
                    resluts.setText("2 - Niska aktywnosc fizyczna");
                    cpm = ppm * 1.4;
                    break;
                case 2:
                    resluts.setText("3 - Umiarkowana aktywnosc fizyczna");
                    cpm = ppm * 1.6;
                    break;
                case 3:
                    resluts.setText("4 - Aktywny tryb zycia");
                    cpm = ppm * 1.75;
                    break;
                case 4:
                    resluts.setText("5 - Bardzo aktywny tryb zycia");
                    cpm = ppm * 2;
                    break;
                case 5:
                    resluts.setText("6 - Wyczynowe uprawianie sportu");
                    cpm = ppm * 2.1;
                    break;
    
            }
    
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
    
        }
    }

    Tu jest Main2Activity.java:

    Spoiler

     

    
    package com.example.maronzo.aplikacjaandroid2019zaliczenie;
    
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class Main2Activity extends AppCompatActivity {
    
        public final static Double ppm2Activ = 0.0;
        public final static Double cpm2Activ = 0.0;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            Bundle b = getIntent().getExtras();
            Double ppm = b.getDouble(String.valueOf(ppm2Activ), 0.0);
            Double cpm = b.getDouble(String.valueOf(cpm2Activ), 0.0);
    
    
            TextView info = (TextView) findViewById(R.id.informacjeOczlowieku);
            info.setText("Podstawowa przemiana materii: " + ppm + "CPM: " + cpm);
        }
    }

    Tu jest plik Main z xml:

    Spoiler

     

    
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    
        tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:gravity="center"
            android:text="Uzytkowniku!"
            android:textSize="40dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:text="Potrzebujemy kilku informacji o Tobie"
            android:textSize="16dp" />
    
        <EditText
            android:id="@+id/podajWage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="150dp"
            android:layout_marginTop="50dp"
            android:layout_marginRight="150dp"
            android:gravity="center"
            android:hint="Podaj w [Kg]"
            android:inputType="numberDecimal"
            android:textSize="12dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="-8dp"
            android:gravity="center"
            android:text="Wpisz swoja aktualna wage"
            android:textSize="15dp"
            android:textStyle="italic" />
    
        <EditText
            android:id="@+id/podajWzrost"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="145dp"
            android:layout_marginTop="1dp"
            android:layout_marginRight="145dp"
            android:gravity="center"
            android:hint="Podaj w [cm]"
            android:inputType="numberDecimal"
            android:textSize="12dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="-8dp"
            android:gravity="center"
            android:text="Wpisz swoj wzrost"
            android:textSize="15dp"
            android:textStyle="italic" />
    
        <EditText
            android:id="@+id/podajDateUrodzenia"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="145dp"
            android:layout_marginTop="1dp"
            android:layout_marginRight="145dp"
            android:gravity="center"
            android:hint="RRRR"
            android:inputType="numberDecimal"
            android:textSize="12dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="-8dp"
            android:gravity="center"
            android:text="Wpiz swoj rok urodzenia"
            android:textSize="15dp"
            android:textStyle="italic" />
    
        <RadioGroup
            android:layout_width="match_parent"
            android:id="@+id/sexGroup"
            android:layout_height="wrap_content"
            android:layout_marginLeft="55dp"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">
    
            <RadioButton
                android:id="@+id/plecMezczyzna"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Mezczyzna"
                />
    
            <RadioButton
                android:id="@+id/plecKobieta"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Kobieta"
                />
        </RadioGroup>
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:text="Wybierz diete, ktora Cie interesuje:"
            android:textSize="19dp" />
    
        <Spinner
            android:id="@+id/spinner1"
            android:layout_height="40dp"
            android:layout_width="400dp"
            tools:layout_editor_absoluteX="0dp"
            tools:layout_editor_absoluteY="0dp"
            android:entries="@array/numbers"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="10dp"
            android:text="Opis diety:"
            android:textSize="16dp" />
    
        <TextView
            android:id="@+id/opisDiety"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:layout_marginTop="-12dp"
            android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean mi tellus, volutpat sed interdum nec, vestibulum eget lacus. Suspendisse potenti. Maecenas magna libero, vulputate et blandit at, eleifend id turpis. Donec sed feugiat magna. Aliquam convallis nisi efficitur lectus accumsan, quis aliquam lacus fringilla. Donec rutrum sapien in mauris pretium eleifend."
            android:textSize="14dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:text="Wybierz diete, ktora Cie interesuje:"
            android:textSize="19dp" />
    
        <Spinner
            android:id="@+id/spinner2"
            android:layout_height="40dp"
            android:layout_width="400dp"
            tools:layout_editor_absoluteX="0dp"
            tools:layout_editor_absoluteY="0dp"
            android:entries="@array/numbers2"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="10dp"
            android:text="Opis diety:"
            android:textSize="16dp" />
    
        <TextView
            android:id="@+id/opisAktywnosciFizycznej"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:layout_marginTop="-12dp"
            android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean mi tellus, volutpat sed interdum nec, vestibulum eget lacus. Suspendisse potenti. Maecenas magna libero, vulputate et blandit at, eleifend id turpis. Donec sed feugiat magna. Aliquam convallis nisi efficitur lectus accumsan, quis aliquam lacus fringilla. Donec rutrum sapien in mauris pretium eleifend."
            android:textSize="14dp" />
    
    
        <Button
            android:id="@+id/przejdzDalej2"
            android:layout_width="120dp"
            android:layout_height="70dp"
            android:layout_marginLeft="240dp"
            android:layout_marginTop="40dp"
            android:layout_marginBottom="40dp"
            android:gravity="center"
            android:onClick="click"
            android:text="GOTOWE"
             />
    
        <TextView
            android:id="@+id/textViewaaaaaa"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Wiek \n ssds\n sfgs\n" />
    </LinearLayout>
    </ScrollView>
    Spoiler
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".Main2Activity">
    
        <TextView
            android:id="@+id/informacjeOczlowieku"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>

     

    Tutaj activity_main2.xml 

    A tu niżej wstawiam tablicę Stringów:

    Spoiler
    
    <resources>
        <string name="app_name">AplikacjaAndroid2019Zaliczenie</string>
        <string-array name="numbers">
            <item>1 - Dieta umiarkowana</item>
            <item>2 - Dieta zrównoważona</item>
            <item>3 - Dieta Bogatobiałkowa</item>
            <item>4 - Dieta Niskotłuszczowa</item>
            <item>5 - Dieta Niskowęglowodanowa</item>
            <item>6 - Dieta Niskobiałkowa</item>
            <item>7 - Dieta Ketogeniczna</item>
            <item>8 - Dieta Optymalna</item>
        </string-array>
    
        <string-array name="numbers2">
            <item>1 - Pacjent chory lezacy w lozku</item>
            <item>2 - Niska aktywnosc fizyczna</item>
            <item>3 - Umiarkowana aktywnosc fizyczna</item>
            <item>4 - Aktywny tryb zycia</item>
            <item>5 - Bardzo aktywny tryb zycia</item>
            <item>6 - Wyczynowe uprawianie sportu</item>
        </string-array>
    </resources>

     

     

    Na prośbę Moderatora @mmaciejow rozdzielam temat na 3 wątki w każdym poruszając osobno inny problem
     

    Edytowane przez Szymon035
    Poprawiono nazwę na zgodną z regulaminem forum

    Udostępnij tę odpowiedź


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

    A dlaczego nie weźmiesz i nie obliczysz sobie wszystkiego na podstawie przycisku "R.id.przejdzdalej"?

    Nie obliczaj tego na żywo bo na teraźniejszą chwilę nie ma sensu. Klika użytkownik przejdź dalej i obliczasz wszystkie rzeczy na tym ekranie. Natomiast jakbyś chciał wszystko oprzeć na "zdarzeniach" czyli na zmienności każdego pola to nie zdziw się niestety, że jedno wykonuje się z kijowymi danymi z innych. Nad tym nie zapanujesz aż tak łatwo. Możesz to wziąć i pozamykać w jakieś warunki if żeby się nie obliczało jak pozostałe dane nie są wpisane, ale to nie ma sensu. Wsadź wszystko pod przycisk i oblicz dietę.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)
    Spoiler
    
    package com.example.maronzo.aplikacjaandroid2019zaliczenie;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Spinner;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        private EditText wiek;
        private EditText waga;
        private double ppm;
        private int age;
        private double weight;
        private TextView resluts;
        private   RadioButton buttonMezczyzna;
        private RadioButton buttonKobieta;
        private double cpm;
        Object value;
    
        Button btn1;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            wiek = (EditText) findViewById(R.id.podajDateUrodzenia);
            waga = (EditText) findViewById(R.id.podajWage);
            btn1 = (Button) findViewById(R.id.przejdzDalej2);
            resluts = (TextView) findViewById(R.id.textViewaaaaaa);
            buttonKobieta = (RadioButton) findViewById(R.id.plecKobieta);
            buttonMezczyzna = (RadioButton) findViewById(R.id.plecMezczyzna);
    
            final Spinner spinner = findViewById(R.id.spinner2);
    
    
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String wiekStr = wiek.getText().toString();
                    String wagaStr = waga.getText().toString();
                    weight = Double.parseDouble(wagaStr);
                    age = Integer.parseInt(wiekStr);
    
                    if(buttonKobieta.isChecked()){
                        if (age < 3) {
                            ppm = (58.317 * weight) - 31.10;
                        } else if ((age >= 3) & (age < 10)) {
                            ppm = (20.315 * weight) + 485.90;
                        } else if ((age >= 10) & (age < 18)) {
                            ppm = (13.384 * weight) + 692.60;
                        } else if ((age >= 18) & (age < 30)) {
                            ppm = (14.818 * weight) + 486.60;
                        } else if ((age >= 30) & (age < 60)) {
                            ppm = (8.126 * weight) + 845.60;
                        } else if (age > 60) {
                            ppm = (9.082 * weight) + 658.50;
                        }
                    }
                    if (buttonMezczyzna.isChecked()){
                        if (age < 3) {
                            ppm = (59.512 * weight) - 30.4;
                        } else if ((age >= 3) & (age < 10)) {
                            ppm = (22.706 * weight) + 504.3;
                        } else if ((age >= 10) & (age < 18)) {
                            ppm = (17.686 * weight) + 658.20;
                        } else if ((age >= 18) & (age < 30)) {
                            ppm = (15.057 * weight) + 692.20;
                        } else if ((age >= 30) & (age < 60)) {
                            ppm = (11.472 * weight) + 873.10;
                        } else if (age > 60) {
                            ppm = (11.711 * weight) + 587.70;
                        }
                    }
                    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.numbers2, android.R.layout.simple_spinner_item);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    spinner.setAdapter(adapter);
                    spinner.setOnItemSelectedListener(this);
    
                    resluts.setText("Waga: " + weight + "\nWiek: " + age + "\nPPM: " + ppm);
                }
            });
        }
    
    }

     

    Jak stworzyć Spinnera wewnątrz onClick? Szarpał mi się o spinnera żeby dać mu final to mu narzuciłem, ale jeszcze ma problem z context'em w createFromResource (nie pasuje mu this)

    Naprawdę proszę o wyrozumiałość, bo to dopiero moje początki :)

     

    //Edit: uporałem się z RadioButtonem
     

    Edytowane przez EmAndEm

    Udostępnij tę odpowiedź


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

    @EmAndEm spinner w onClick? Yyy po co? Nie rozumiem. Sam sobie komplikujesz zadanie, dlatego pewne rzeczy nie działają tak jak należy. 

    Tak jak wcześniej wspomniano, zrób pola do wpisywania danych, a na końcu przycisk i on podliczy i wyświetli wynik. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @mmaciejow  właśnie chyba tutaj mamy problem w zrozumieniu siebie nawzajem, więc przedstawie jeszcze raz:

    Chcę, aby znalazły się dwa Spinnery

    Spiner 1) Odpowiedzialny za wybór aktywności fizycznej

    Każdy item = inny przelicznik cpm. Z założenia użytkownik nie zna tego przelicznika więc wpisywanie go z palca w EditText może byłoby proste, ale tak jakby dla przecietnego użytkownika czyniłoby aplikację bezużyteczną

    Spinner 2) Odpowiedzialny za wybór diety

    Każdy item = inny przelicznik białka, tłuszczy i węglowodanów. Reszta jw. z nieznajomością przeliczników.

    Udostępnij tę odpowiedź


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

    @EmAndEm Ty chcesz aby po wybraniu itema ze spineera wynik od razu się pokazywał?

    Załózmy cos takiego mamy user ma dwa pola do wpisywania waga i wiek. Są dwa spinnery tak jak wspomniałeś. I jeden button. User wypełnia te 4 pola i naciska button wtedy pojawia się wynik. Jeśli jakiejś wartoś nie jest wprowadzona wyświetlasz informacje o tym, w przeciwnym wypadku oblicza i wypluwa wynik  Tak to powinieneś zrobić

    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ę

    • Przeglądający   0 użytkowników

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