Reputation: 57
I'm developing my first Android application. It's pretty much a basic tip calculator. For some reason, I can't get Eclipse to acknowledge there's a phone plugged in so I can't debug it that through Eclipse. (I've followed all the steps here to not avail: http://developer.android.com/tools/extras/oem-usb.html) I've just installed it successfully on an emulator, but whenever I open it, it crashes immediately. I've tried it with two different XML layouts, which I'll post below, but I am interested in any insight as to why my app might be crashing. It's very simple; only one activity, but I can't quite find the error. I know it's a ton too look through, but any help is much appreciated. Thanks everyone.
App code:
package com.teamjava.theultimatetipconverter;
import android.app.Activity;
import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
//import android.os.Build;
//import android.app.ActionBar;
public class MainActivity extends Activity {
//create elements
private Button mCalculate;
private RadioButton mStupendous;
private RadioButton mAboveAverage;
private RadioButton mStandard;
private RadioButton mSubpar;
private EditText mCost;
private EditText mTip;
private EditText mTotal;
private RadioGroup mRadioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCalculate = (Button)findViewById(R.id.calculate);
mStupendous = (RadioButton)findViewById(R.id.radio0);
mAboveAverage = (RadioButton)findViewById(R.id.radio2);
mStandard = (RadioButton)findViewById(R.id.radio1);
mSubpar = (RadioButton)findViewById(R.id.radio4);
mRadioGroup = (RadioGroup)findViewById(R.id.radioGroup1);
mRadioGroup.addView(mStupendous);
mRadioGroup.addView(mAboveAverage);
mRadioGroup.addView(mStandard);
mRadioGroup.addView(mSubpar);
mRadioGroup.check(R.id.radio1);
mCost = (EditText)findViewById(R.id.EditText01);
mTip = (EditText)findViewById(R.id.editText5);
mTotal = (EditText)findViewById(R.id.editText6);
mCalculate.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mStupendous.isSelected()){
double bill = Double.valueOf(mCost.toString());
String billString = String.valueOf(bill * .25);
mTip.setText("$" + billString);
mTotal.setText("$" + String.valueOf((bill + Double.parseDouble(billString))));
}
else if(mAboveAverage.isSelected()){
double bill = Double.valueOf(mCost.toString());
String billString = String.valueOf(bill * .2);
mTip.setText("$" + billString);
mTotal.setText("$" + String.valueOf((bill + Double.parseDouble(billString))));
}
else if(mStandard.isSelected()){
double bill = Double.valueOf(mCost.toString());
String billString = String.valueOf(bill * .15);
mTip.setText("$" + billString);
mTotal.setText("$" + String.valueOf((bill + Double.parseDouble(billString))));
}
else if(mSubpar.isSelected()){
double bill = Double.valueOf(mCost.toString());
String billString = String.valueOf(bill * .1);
mTip.setText("$" + billString);
mTotal.setText("$" + String.valueOf((bill + Double.parseDouble(billString))));
}
}
}));
}
}
Android manifest file:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.teamjava.theultimatetipconverter"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.teamjava.theultimatetipconverter.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XML Layout one:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="3"
android:orientation="horizontal" >
<Button
android:id="@+id/calculate"
android:layout_width="wrap_content"
android:layout_column="2"
android:layout_gravity="left"
android:layout_row="6"
android:layout_rowSpan="2"
android:gravity="center_vertical|center_horizontal|left"
android:text="@string/calculate" />
<TextView
android:id="@+id/textView4"
android:layout_column="0"
android:layout_gravity="left|bottom"
android:layout_row="8"
android:text="@string/suggestedTip"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText5"
android:layout_width="130dp"
android:layout_column="2"
android:layout_gravity="left"
android:layout_row="8"
android:layout_rowSpan="2"
android:ems="10"
android:inputType="none|numberDecimal" />
<TextView
android:id="@+id/textView5"
android:layout_column="0"
android:layout_gravity="left"
android:layout_row="10"
android:text="@string/totalBill"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editText6"
android:layout_width="130dp"
android:layout_column="2"
android:layout_gravity="left"
android:layout_row="10"
android:ems="10"
android:inputType="none|numberDecimal" />
<Space
android:layout_width="105dp"
android:layout_height="1dp"
android:layout_column="0"
android:layout_row="0" />
<Space
android:layout_width="26dp"
android:layout_height="1dp"
android:layout_column="2"
android:layout_row="0" />
<Space
android:layout_width="187dp"
android:layout_height="1dp"
android:layout_column="2"
android:layout_row="0" />
<Space
android:layout_width="1dp"
android:layout_height="112dp"
android:layout_column="0"
android:layout_row="0" />
<Space
android:layout_width="1dp"
android:layout_height="28dp"
android:layout_column="0"
android:layout_row="1" />
<Space
android:layout_width="1dp"
android:layout_height="38dp"
android:layout_column="0"
android:layout_row="2" />
<Space
android:layout_width="1dp"
android:layout_height="63dp"
android:layout_column="0"
android:layout_row="3" />
<Space
android:layout_width="1dp"
android:layout_height="24dp"
android:layout_column="0"
android:layout_row="5" />
<Space
android:layout_width="1dp"
android:layout_height="32dp"
android:layout_column="0"
android:layout_row="6" />
<Space
android:layout_width="1dp"
android:layout_height="32dp"
android:layout_column="0"
android:layout_row="7" />
<Space
android:layout_width="1dp"
android:layout_height="27dp"
android:layout_column="0"
android:layout_row="8" />
<Space
android:layout_width="1dp"
android:layout_height="37dp"
android:layout_column="0"
android:layout_row="9" />
<Space
android:layout_width="1dp"
android:layout_height="62dp"
android:layout_column="0"
android:layout_row="10" />
<Space
android:layout_width="24dp"
android:layout_height="15dp"
android:layout_column="1"
android:layout_row="0" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_column="0"
android:layout_gravity="left|top"
android:layout_row="4" >
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/standard" />
</RadioGroup>
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="left|center_vertical"
android:layout_row="3"
android:checked="true"
android:text="@string/stupendous" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="left|center_vertical"
android:layout_row="3"
android:text="@string/aboveAverage" />
<EditText
android:id="@+id/EditText01"
android:layout_width="126dp"
android:layout_column="2"
android:layout_gravity="left|bottom"
android:layout_row="0"
android:ems="10"
android:inputType="numberDecimal" >
<requestFocus />
</EditText>
<RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="left|top"
android:layout_row="4"
android:text="@string/subpar" />
<TextView
android:id="@+id/textView1"
android:layout_width="136dp"
android:layout_height="37dp"
android:layout_column="0"
android:layout_gravity="center_horizontal|top"
android:layout_row="0"
android:text="@string/tipConverter"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<TextView
android:id="@+id/textView2"
android:layout_height="39dp"
android:layout_column="0"
android:layout_gravity="left|bottom"
android:layout_row="0"
android:text="@string/costOfMeal"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView3"
android:layout_width="120dp"
android:layout_column="0"
android:layout_gravity="left|center_vertical"
android:layout_row="2"
android:text="@string/serviceQuality"
android:textAppearance="?android:attr/textAppearanceMedium" />
</GridLayout>
XML Layout Two:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffffff"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="23dp"
android:text="Cost of Meal"
android:textSize="18sp"
android:textColor="#ff000000"
android:layout_x="2dp"
android:layout_y="7dp" />
<EditText
android:id="@+id/EditText01"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#ff000000"
android:numeric="decimal"
android:layout_x="179dp"
android:layout_y="7dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="27dp"
android:text="How was your service?"
android:textSize="18sp"
android:textColor="#ff000000"
android:layout_x="4dp"
android:layout_y="52dp" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="198dp"
android:layout_height="191dp"
android:layout_x="2dp"
android:layout_y="82dp">
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stupendous"
android:textColor="#ff000000" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Above Average"
android:textColor="#ff000000" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Standard"
android:textColor="#ff000000" />
<RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subpar"
android:textColor="#ff000000" />
</RadioGroup>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Suggested Tip"
android:textSize="18sp"
android:textColor="#ff000000"
android:layout_x="2dp"
android:layout_y="353dp" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Total Bill"
android:textSize="18sp"
android:textColor="#ff000000"
android:layout_x="2dp"
android:layout_y="396dp" />
<EditText
android:id="@+id/editText5"
android:layout_width="107dp"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#ff000000"
android:numeric="decimal"
android:layout_x="191dp"
android:layout_y="345dp" />
<EditText
android:id="@+id/editText6"
android:layout_width="107dp"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#ff000000"
android:password="true"
android:numeric="decimal"
android:layout_x="190dp"
android:layout_y="389dp" />
<Button
android:id="@+id/widget46"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calculate"
android:textSize="18sp"
android:layout_x="204dp"
android:layout_y="284dp" />
</AbsoluteLayout>
Edit: Here is my error log from LogCat:
05-07 23:09:09.732: D/dalvikvm(2112): GC_FOR_ALLOC freed 64K, 4% free 3523K/3664K, paused 29ms, total 34ms
05-07 23:09:09.902: D/dalvikvm(2112): GC_FOR_ALLOC freed 12K, 3% free 3950K/4064K, paused 27ms, total 30ms
05-07 23:09:10.032: D/AndroidRuntime(2112): Shutting down VM
05-07 23:09:10.032: W/dalvikvm(2112): threadid=1: thread exiting with uncaught exception (group=0xb0d40b20)
05-07 23:09:10.042: E/AndroidRuntime(2112): FATAL EXCEPTION: main
05-07 23:09:10.042: E/AndroidRuntime(2112): Process: com.teamjava.theultimatetipconverter, PID: 2112
05-07 23:09:10.042: E/AndroidRuntime(2112): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.teamjava.theultimatetipconverter/com.teamjava.theultimatetipconverter.MainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.os.Handler.dispatchMessage(Handler.java:102)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.os.Looper.loop(Looper.java:136)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-07 23:09:10.042: E/AndroidRuntime(2112): at java.lang.reflect.Method.invokeNative(Native Method)
05-07 23:09:10.042: E/AndroidRuntime(2112): at java.lang.reflect.Method.invoke(Method.java:515)
05-07 23:09:10.042: E/AndroidRuntime(2112): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-07 23:09:10.042: E/AndroidRuntime(2112): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-07 23:09:10.042: E/AndroidRuntime(2112): at dalvik.system.NativeStart.main(Native Method)
05-07 23:09:10.042: E/AndroidRuntime(2112): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.view.ViewGroup.addView(ViewGroup.java:3415)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.widget.RadioGroup.addView(RadioGroup.java:141)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.view.ViewGroup.addView(ViewGroup.java:3360)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.view.ViewGroup.addView(ViewGroup.java:3336)
05-07 23:09:10.042: E/AndroidRuntime(2112): at com.teamjava.theultimatetipconverter.MainActivity.onCreate(MainActivity.java:39)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.Activity.performCreate(Activity.java:5231)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-07 23:09:10.042: E/AndroidRuntime(2112): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-07 23:09:10.042: E/AndroidRuntime(2112): ... 11 more
Upvotes: 0
Views: 85
Reputation: 5589
one thing you have is that here you say that mCalculate is a Button.
private Button mCalculate;
and you instantiate the view R.id.button1 of your layout as a Button
mCalculate = (Button)findViewById(R.id.button1);
but your layout says that R.id.button is a GridLayout:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="3"
android:orientation="horizontal" >
I think you are wanting to instantiate the Button view R.id.calculate
mCalculate = (Button)findViewById(R.id.calculate);
Also when the execution fails see Logcat in the DDMS view and post the log of the error. It has important information that will lead to solve the problem.
I think the problem is you are trying to add the radiobuttons to the radiogroup, but the radiobuttons already have a father, which is defined in the layout file.
Try, instead of closing the Radiogroup tag after the first radiobutton in the layout, put all the radiobuttons together and close the tag after the last one. And remove all the mRadioGroup.addView(...) from the program.
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_column="0"
android:layout_gravity="left|top"
android:layout_row="4" >
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/standard" />
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="left|center_vertical"
android:layout_row="3"
android:checked="true"
android:text="@string/stupendous" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="left|center_vertical"
android:layout_row="3"
android:text="@string/aboveAverage" />
<RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_gravity="left|top"
android:layout_row="4"
android:text="@string/subpar" />
</RadioGroup>
Upvotes: 1