2012-01-26 5 views
1

Привет, Ive написал простое приложение для Android с двумя страницами xml, у которого есть кнопка изображения, которую ive сфотографировал, чтобы открыть вторую страницу xml при щелчке. Код не возвращает ошибок и работает нормально, но когда я нажимаю кнопку в эмуляторе Android, он падает и просит меня закрыть. Вот код, я работаю над:Android Application Crash on button Нажмите

Первой активность:

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); 
    }  
} 

Первого XML файл:

<?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> 

Второй активность:

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); 
    } 
} 

Второго XML файл:

<?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> 

Любые идеи о том, почему это должно произойти?

Заранее спасибо

Я просто побежал снова, вот файл LogCat

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> 
+0

что это за ошибка?пожалуйста, разместите здесь сообщение об ошибке –

+2

Вы объявили вторую активность в вашем файле манифеста? – DeeV

+0

Можете ли вы добавить сообщения из логарифма? Вы также можете попытаться добавить что-то во второй макет. –

ответ

2

Я думаю, что ваш класс MenuActivity находится в другом пакете для вашего класса TrainActivity. Я не знаю, как сделать это с макетом пакета у вас есть, но если у вас следующее:

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

Тогда ваш манифест запись будет:

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

Спасибо Многое, что было проблемой, мне просто пришлось изменить объявление пакета, чтобы оба класса находились в одном пакете. благодаря – user1161118

0

Убедитесь, что вы добавить оба вида деятельности в файле AndroidManifest.xml ,

+0

Ive разместил манифест выше, где ив добавил вторую активность, это правильно? Я все еще получаю ту же ошибку – user1161118

0

я думаю, что вы не ввели деятельность в файле манифеста каждое действие должно быть там в AndroidManifest.xml файл такой как этот

<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> 

и если проблема, то используйте Намерение myIntent = новый Intent (TrainActivity. это, MenuActivity.class);

+0

Привет, я обновил вопрос, включив в него файл android manifest и logcat, я все еще получаю ошибку не найденной активности, когда я нажимаю кнопку после добавления активности в манифест? – user1161118

0

Прежде всего, необходимо добавить действие в ваш файл манифеста (без пробелов):

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

Во-вторых, для самой кнопки это предложение о том, как это можно сделать:

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); 
    }  
} 
0

Вам нужно ImageButtom на создании экземпляра 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); 

} 

} 

удачи.

0

Я думаю, что у вас есть классы различные пакеты.