user1161118
user1161118

Reputation: 97

Android Application Crash on button Click

Hi Ive written a simple android application with two xml pages, one has an image button which ive rigged to open the second xml page when it is clicked. The code returns no errors and runs fine but when I click the button in the android emulator it crashes and asks me to force close. Here is the code I am working on:

First Activity:

package com.android.Train;

import com.android.TrainMenu.MenuActivity;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;

    public class TrainActivity extends Activity 
    {
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void goMenu(View v)
    {
      Intent myIntent = new Intent(this, MenuActivity.class);
      startActivity(myIntent);
    }    
}

First XML File:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/enterButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/button_enter"
        android:clickable="true"
        android:onClick="goMenu" />

    </LinearLayout>

Second Activity:

package com.android.TrainMenu;

import android.app.Activity;
import android.os.Bundle;

import com.android.Train.R;

public class MenuActivity extends Activity 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu);
    }
}

Second XML File:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

</RelativeLayout>

Any ideas on why this should crash?

Thanks in advance

I just ran it again, here is the logCat file

01-26 14:21:37.784: D/AndroidRuntime(287): Shutting down VM
01-26 14:21:37.784: W/dalvikvm(287): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-26 14:21:37.815: E/AndroidRuntime(287): FATAL EXCEPTION: main
01-26 14:21:37.815: E/AndroidRuntime(287): java.lang.IllegalStateException: Could not execute method of the activity
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.view.View$1.onClick(View.java:2072)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.view.View.performClick(View.java:2408)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.view.View$PerformClick.run(View.java:8816)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.os.Handler.handleCallback(Handler.java:587)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.os.Looper.loop(Looper.java:123)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-26 14:21:37.815: E/AndroidRuntime(287):  at java.lang.reflect.Method.invokeNative(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287):  at java.lang.reflect.Method.invoke(Method.java:521)
01-26 14:21:37.815: E/AndroidRuntime(287):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-26 14:21:37.815: E/AndroidRuntime(287):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-26 14:21:37.815: E/AndroidRuntime(287):  at dalvik.system.NativeStart.main(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287): Caused by: java.lang.reflect.InvocationTargetException
01-26 14:21:37.815: E/AndroidRuntime(287):  at com.android.Train.TrainActivity.goMenu(TrainActivity.java:23)
01-26 14:21:37.815: E/AndroidRuntime(287):  at java.lang.reflect.Method.invokeNative(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287):  at java.lang.reflect.Method.invoke(Method.java:521)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.view.View$1.onClick(View.java:2067)
01-26 14:21:37.815: E/AndroidRuntime(287):  ... 11 more
01-26 14:21:37.815: E/AndroidRuntime(287): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.Train/com.android.TrainMenu.MenuActivity}; have you declared this activity in your AndroidManifest.xml?
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.app.Activity.startActivityForResult(Activity.java:2817)
01-26 14:21:37.815: E/AndroidRuntime(287):  at android.app.Activity.startActivity(Activity.java:2923)
01-26 14:21:37.815: E/AndroidRuntime(287):  ... 15 more

Android Manifest.XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.Train"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".TrainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
        android:name=".MenuActivity"
        android:label="@string/app_name" />

    </application>

</manifest>

Upvotes: 1

Views: 7050

Answers (6)

user3073439
user3073439

Reputation: 29

I think you have classes in different packages.

Upvotes: 0

waqaslam
waqaslam

Reputation: 68167

Make sure you add both activities in your AndroidManifest.xml file .

Upvotes: 0

dave.c
dave.c

Reputation: 10908

I think its because your MenuActivity class is in a different package to your TrainActivity class. I'm not sure how to do it with the package layout you have, but if you had the following:

com.ardroid.train.TrainActivity
com.ardroid.train.menu.MenuActivity

Then your manifest entry would be:

<activity 
    android:name=".menu.MenuActivity "
    android:label="@string/app_name" />

Upvotes: 2

Scalarr
Scalarr

Reputation: 756

First you need to add the activity to your manifest file (without whitespaces):

<activity android:name=".MenuActivity"></activity>

Second, for the button itself this is a suggestion for how it could be done:

import com.android.TrainMenu.MenuActivity;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;

    public class TrainActivity extends Activity 
    {

    ImageButton button;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (ImageButton) findViewById(R.id.enterButton);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                   goMenu();
            }

        });
    }


    public void goMenu()
    {
      Intent myIntent = new Intent(this, MenuActivity.class);
      startActivity(myIntent);
    }    
}

Upvotes: 0

Namor Alves
Namor Alves

Reputation: 143

You need instanciation ImageButtom on Activty:

ImageButton btnImg;

... oncreadte(...) {

btnImg = (ImageButton) findViewById(R.id.enterButton);

...

btnImg.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

// This call new Activity on press ImageButton
Intent it = new Intent(TrainActivity.this, MenuActivity.class);
startActivity(it);

}

}

Good luck.

Upvotes: 0

Ramesh Solanki
Ramesh Solanki

Reputation: 2926

i think you have not entered activity in manifest file each activity must be there in AndroidManifest.xml file such like this

   <application  
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity 
        android:name=".TrainActivity "
        android:label="@string/app_name" >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

     <activity 
        android:name=".MenuActivity "
        android:label="@string/app_name" />
</application>

and if problem then use Intent myIntent = new Intent(TrainActivity.this, MenuActivity.class);

Upvotes: 0

Related Questions