使用ListActivity时强制关闭app和ActivityNotFoundException

时间:2013-01-31 16:27:13

标签: java android android-intent

我正在关注youtube教程来创建Android应用程序。 在其中一个教程中,他们讲述了如何使用List活动创建Menu类。

public class Menu extends ListActivity {

String classes[] = {"Start","example1","example2","example3","example4","example5","example6"};


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    String cheese = classes[position];
    try{
        Class ourClass = Class.forName("com.example.add." + cheese);
        Intent ourIntent = new Intent(Menu.this,ourClass);
        startActivity(ourIntent);
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }
}

并在清单中添加活动。

<activity
        android:name=".Splash"
        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:exported="false"
        android:name=".Menu"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MENU" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <activity
        android:exported="false"
        android:name="com.example.add.Start"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.add.START" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我的项目有一个Start类,它将一个添加到一个计数器并显示它, 一个Splash类,定义背景图像,音乐,它是主类。 在添加Menu类之前我的应用程序工作正常,但在我添加它之后我的应用程序开始强制关闭,logcat在第28行的Splash类中显示了一个ActivityNotFoundException和错误

public class Splash extends Activity{

MediaPlayer ourSong;

@Override
protected void onCreate(Bundle Dab) {
    // TODO Auto-generated method stub
    super.onCreate(Dab);
    setContentView(R.layout.splash);
    ourSong = MediaPlayer.create(Splash.this, R.raw.nodebeat);
    ourSong.start();
    Thread timer = new Thread(){
        public void run(){   //framework to start a new thread
            try{
                sleep(5000);
            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{
                Intent openStart = new Intent("com.example.add.MENU");
                startActivity(openStart);
            }
        }
    };
    timer.start();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    ourSong.release();
    finish();
}

所以请帮助我是Android应用程序开发的新手,我来到这里。 Logcat日志的链接: - https://docs.google.com/file/d/0BxLaXhL-q50-MHlhUW93SmxNT0U/edit调试日志 https://docs.google.com/file/d/0BxLaXhL-q50-b1pzbVpIcVNQR2s/edit错误日志

感谢。

2 个答案:

答案 0 :(得分:1)

您正在使用错误的意图过滤器来尝试启动。所以要么改变

 <action android:name="android.intent.action.MENU" />

 <action android:name="com.example.add.MENU" />

所以一切都匹配。

在您的代码中更改您的电话,以便:

Intent openStart = new Intent("android.intent.action.MENU");

您应该阅读Intent Filters

你也可以使用explict意图,因为你没有导出这个Activity而你知道它的名字,我认为不需要意图过滤器。

Intent openStart = new Intent(Splash.this, Menu.class);
startActivity(openStart);

答案 1 :(得分:0)

下面(1和2)位置的意图动作应该相同,而不是。让它们完全相同。

   <intent-filter>
        <action android:name="android.intent.action.MENU" />// (1)

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

 Intent openStart = new Intent("com.example.add.MENU"); (2)