Skocz do zawartości
EmAndEm

Problem z przesyłaniem danych między Activity

    Rekomendowane odpowiedzi

    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) Poprawnie oblicza wartość na pierwszym Activity, ale po spakowaniu i wysłaniu do drugiego nie wiedzieć czemu widzi mi wartość cpm ( podczas gdy na activity 1 jest ok )

     

    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>
    14 godzin temu, Coders Lab napisał:

    Nie udostępniłeś pełnego kodu. Przez co nie mogę uruchomić Twojej aplikacji. Gdybym mógł uruchomić to łatwiej byłoby mi określić co masz nie tak, ale zakładam że powinieneś sprawdzać czy wszystkie potrzebne pola masz uzupełnione i dopiero wtedy wykonywać obliczenia. Być może dobrym pomysłem byłoby obserwowanie niektórych pól i kiedy zmienią wartość wywołanie obliczeń.

     

    W kodzie podświetla mi:

    
    R.array.numbers2
      
    informacjeOczlowieku
    
    R.layout.activity_main2

     

    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>

     

    Jeżeli chodzi o śledzenie to robiłem i wygląda to tak:
    Uzupełnienie wartości kluczowych (tj. waga i wiek) + kliknięcie gotowe = brak danych ( to akurat logiczne bo nic nie liczy )
    Uzupełnienie wartości kluczowych (tj. waga i wiek) + wybranie płci + kliknięcie gotowe = brak danych ( tu powinien liczyć chociażby przelicznik z płci, ale wydaje mi się, że też pierwszego domyślnie ustawionego Spinnera )
    Uzupełnienie wartości kluczowych (tj. waga i wiek) + wybranie płci + zmiana z Pacjent leżący w łóżku na niska aktywność i z powrotem na pacjent chory na lozku + klikniecie gotowe = przesyla dane ale pod ppm i cpm kryje się cpm ( mimo, że jak robiłem to na pierwszym activity to wartości były poprawne - tj. różne - więcj problem jest gdzieś na przesyle między activity )

     

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

     

    Udostępnij tę odpowiedź


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

    @EmAndEm żle wysyłasz intenta

    intent.putExtra(String.valueOf(Main2Activity.ppm2Activ), ppm);

    pierwsza wartośc musi być stringiem, nie możesz "konwertować" z Double na String. Zrób sobie coś tego typu:

        public final static String ppm2Activ = "PPM";
    

    A jeszcze lepiej jest na sztywno przypisać wartośc w intent niż tworzyć zmienną.

     

     

    Udostępnij tę odpowiedź


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

    Zgadzam się z przedmówcą, że źle wysyłasz intent. Powinieneś wartość zmiennej przypisać do jakiegoś Stringa i w drugiej Activity odczytaj ją z tego Stringa. 

    Natomiast jak jeszcze patrzę na kod to tak. 

    - static a do tego final powinien być z wielkich liter, pisany z "_" czyli PPM_2_ACTIVE = "PPM"

    - pomyśl na przykład nad tym żeby wydzielić do jakiegoś interfejsu, klasy, czegokolwiek innego wyliczanie wartości na podstawie płci i wieku. Takie zagmatwane pisanie if else else else średnio się czyta i momencie kiedy przyjdzie Ci to debugować to się zajedziesz. 

    - Zamiast tekstów po polsku, odczytuj je ze strings.xml bo masz przynajmniej zapewnioną wielojęzykowość

     

    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ę.