GoldenEarring
GoldenEarring

Reputation: 57

Android app crashing immediately upon opening

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

Answers (1)

Juan
Juan

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

Related Questions