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>
Coders_Lab
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 @mmaciejowrozdzielam temat na 3 wątki w każdym poruszając osobno inny problem