- Forum-Beiträge: 9
19.11.2012, 16:30:32 via Website
19.11.2012 16:30:32 via Website
ich schreibe gerade an meiner ersten App. Es ist ein BMI-Rechner, mit 3. Activitys.
In der SecondActivity.java berechne ich den BMI-Wert (Code siehe unten), in der ThirdActivity soll dieser BMI-double-Wert (auf 2. Nachkommastellen gerundet) dann in einem TextView mit "%1$s" eingefügt werden.
Ich habe nun mittlerweile raus bekommen, dass man komplexe Datentypen am besten mit Parcelable übergibt. Hier habe ich eine Klasse "DoubleValue implements Parcalable" geschrieben, aber so ganz verstanden hab ich die Hintergründe noch nicht.
Muss ich in der DoubleValue-Klassedie Berechnung für den BMI-Wert durchführen, oder kann ich es wie bereits getan in der SecondActivity machen und dann einfach an "DoubleValue implements Parcelable" übergeben.
Ich hoffe jemand macht sich die Mühe und schaut mal fix drüber.. (sieht viel aus, ist es aber nicht)
Hier mein Code für die erwähnten Klassen: SecondActivity, ThirdActivity und Double Value
Im Moment kommt die Fehlermeldung: java.lang.RuntimeException: Unable to start activity Component Info ... ThirdActivity
Danke erstmal!!
2
3import java.text.DecimalFormat;
4import java.text.NumberFormat;
5
6import android.os.Bundle;
7import android.annotation.SuppressLint;
8import android.app.Activity;
9import android.content.Intent;
10import android.util.Log;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.widget.Button;
14import android.widget.EditText;
15import android.widget.TextView;
16
17public class SecondActivity extends Activity {
18
19
20 private EditText ageEdit, heightEdit, weightEdit;
21 private Button buttonBMI;
22 public TextView bmiValue, name_gruss;
23 public String bmi;
24 public static double bmi2, height, weight;
25 public String bmiString;
26
27
28
29 private static final String TAG = MainActivity.class.getSimpleName();
30
31 @Override
32 public void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.second_main);
35 Intent in = getIntent();
36
37 name_gruss = (TextView) findViewById(R.id.name_gruss);
38 name_gruss.setText(getString(R.string.begruessung, in.getStringExtra("Name")));
39
40
41 // wenn kein Zwischenspeicher vorliegt > folgende Ausgabe im View LogCat
42 // if-Abfrage um NullpointerException zu vermeiden
43 if (savedInstanceState == null) {
44 Log.d(TAG, "savedInstanceState war null");
45 //sobald einer Zwischenspeicher vorliegt, auch wenn Bildschirm nur gedreht wurde
46 } else {
47 Log.d(TAG,
48 "wurde vor "
49 + (System.currentTimeMillis() - savedInstanceState
50 .getLong(TAG)) + " Millisekunden beendet");
51 }
52
53 buttonBMI = (Button) findViewById(R.id.buttonBMI);
54 buttonBMI.setText(R.string.buttonBMI);
55
56 ageEdit = (EditText) findViewById(R.id.ageEdit);
57 heightEdit = (EditText) findViewById(R.id.heightEdit);
58 weightEdit = (EditText) findViewById(R.id.weightEdit);
59
60
61 buttonBMI.setOnClickListener(new OnClickListener() {
62
63
64
65
66
67
68 @SuppressLint({ "NewApi", "UseValueOf" })
69 public void onClick(View v) {
70
71 if ((ageEdit.getText().length() == 0) || (weightEdit.getText().length() == 0) || (heightEdit.getText().length() == 0) )
72 {
73 System.out.println("popup");
74 } else {
75
76 double age = Double.valueOf(ageEdit.getText().toString());
77 double height = Double.valueOf(heightEdit.getText().toString());
78 double weight = Double.valueOf(weightEdit.getText().toString());
79
80 System.out.println(age);
81 System.out.println(height);
82 System.out.println(weight);
83
84 double bmi1 = height * height;
85
86 System.out.println(bmi1);
87 double bmi2 = weight/bmi1 * 10000;
88
89 bmiString = (new Double(bmi2).toString());
90
91 }
92
93 Intent thirdA = new Intent(getApplicationContext(), ThirdActivity.class);
94
95 thirdA.putExtra("DoubleValue", bmi2);
96 startActivity(thirdA);
97 }
98 });
99
100 }
101
102 @Override
103 // überschreiben der Methode onSaveInstanceState um beim Beenden der
104 // Activity Daten in einem Bundle abzulegen
105 protected void onSaveInstanceState(Bundle outState) {
106 // Aufruf der Elternmehtode um Inhalte z.B. in Textfeldern beim erneuten
107 // Wiederaufruf zu sichern
108 super.onSaveInstanceState(outState);
109 // mit put-Methode auf Bundle-Referenz "outState" werden beim Beenden
110 // einer Activity Daten in einem Bundle abgelegt
111 outState.putLong(TAG, System.currentTimeMillis());
112 }
113}
2
3import android.os.Parcel;
4import android.os.Parcelable;
5
6public class DoubleValue implements Parcelable {
7
8 public double bmiValue =SecondActivity.bmi2;
9
10 // Constructor
11 public DoubleValue(double bmiValue){
12 this.bmiValue = bmiValue;
13 }
14
15 //Parcelling part
16 public DoubleValue(Parcel in) {
17 bmiValue = in.readDouble();
18 }
19
20 public double getBmiValue() {
21 return this.bmiValue;
22 }
23
24 public void setBmiValue(double bmiValue) {
25 this.bmiValue = bmiValue;
26 }
27
28 @Override
29 public int describeContents() {
30 return 0;
31 }
32
33 @Override
34 public void writeToParcel(Parcel dest, int flags) {
35 dest.writeDouble(this.bmiValue);
36
37
38// dest.writeStringArray(new String[] { this.id, this.name, this.grade });
39 }
40
41 @SuppressWarnings("rawtypes")
42 public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
43 public DoubleValue createFromParcel(Parcel in) {
44 return new DoubleValue(in);
45 }
46
47 public DoubleValue[] newArray(int size) {
48 return new DoubleValue[size];
49 }
50 };
51}
2import android.content.Intent;
3import android.os.Bundle;
4import android.util.Log;
5import android.widget.TextView;
6
7public class ThirdActivity extends Activity {
8
9 private static final String TAG = ThirdActivity.class.getSimpleName();
10 private TextView bmiValue;
11 DoubleValue doubleValue;
12
13 @Override
14 public void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.third_main);
17 Bundle data = getIntent().getExtras();
18 doubleValue = data.getParcelable("DoubleValue");
19 Intent thirdAct = getIntent();
20
21 bmiValue = (TextView) findViewById(R.id.bmiValue);
22 bmiValue.setText(getString(R.string.bmiValue,thirdAct.getStringExtra("DoubleValue")));
23
24
25
26 // wenn kein Zwischenspeicher vorliegt > folgende Ausgabe im View LogCat
27 // if-Abfrage um NullpointerException zu vermeiden
28 if (savedInstanceState == null) {
29 Log.d(TAG, "savedInstanceState war null");
30 // sobald einer Zwischenspeicher vorliegt, auch wenn Bildschirm nur
31 // gedreht wurde
32 } else {
33 Log.d(TAG,
34 "wurde vor "
35 + (System.currentTimeMillis() - savedInstanceState
36 .getLong(TAG)) + " Millisekunden beendet");
37
38 }
39 }
40}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.