【问题标题】:switching activity comes to error切换活动出错
【发布时间】:2011-10-24 02:17:09
【问题描述】:

我的项目在切换活动时遇到问题。 mt 项目包含 3 个具有 3 种不同布局的活动,因此一种布局对应一种活动。 但是,项目无法运行,模拟器提示“应用程序 myProject 已意外停止”

这是我的代码:

public class myProject extends ListActivity {

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main_layout);

     Button loginButton = (Button) findViewById(R.id.login);
     loginButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View view) {
                 Intent myIntent = new Intent(view.getContext(), login.class);
                 startActivityForResult(myIntent, 0);
             }

     });

     Button joinButton = (Button) findViewById(R.id.join);
     joinButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View view) {
                 Intent myIntent = new Intent(view.getContext(), register.class);
                 startActivityForResult(myIntent, 0);
             }

     });

     Button exitButton = (Button) findViewById(R.id.exit);
     exitButton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View view) {
                 System.exit(0);
             }

     });
}

这里是 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="myProject.app"
  android:versionCode="1"
  android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".main"
              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=".login"></activity>
    <activity android:name=".main"></activity>
    <activity android:name=".register"></activity>
</application>
<uses-sdk android:minSdkVersion="9" />
</manifest> 

请帮我找出问题所在。谢谢。

更新 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="myProject.app"
  android:versionCode="1"
  android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".myProject"
              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=".choosepet"></activity>
    <activity android:name=".login"></activity>
    <activity android:name=".petMain"></activity>
    <activity android:name=".register"></activity>
</application>
<uses-sdk android:minSdkVersion="9" />
</manifest> 

我已经更新了,还是无法在模拟器中运行。

更新 2

我尝试删除所有监听器,看起来像这样:

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.myProject_layout);

 }

项目顺利进行。我认为错误出在按钮侦听器中。有人可以帮忙解决吗?

logcat 中的错误:

10-24 11:41:08.006: ERROR/AndroidRuntime(644): FATAL EXCEPTION: main
10-24 11:41:08.006: ERROR/AndroidRuntime(644): java.lang.RuntimeException: Unable to start activity ComponentInfo{tamagochi.app/tamagochi.app.tamagochi}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.os.Looper.loop(Looper.java:123)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread.main(ActivityThread.java:3647)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at java.lang.reflect.Method.invokeNative(Native Method)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at java.lang.reflect.Method.invoke(Method.java:507)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at dalvik.system.NativeStart.main(Native Method)
10-24 11:41:08.006: ERROR/AndroidRuntime(644): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ListActivity.onContentChanged(ListActivity.java:243)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:210)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.Activity.setContentView(Activity.java:1657)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at tamagochi.app.tamagochi.onCreate(tamagochi.java:18)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
10-24 11:41:08.006: ERROR/AndroidRuntime(644):     ... 11 more

【问题讨论】:

  • logcat 关闭时出现什么错误?
  • 我在上面提到过。 “应用程序 myProject 已意外停止。请重试。”和一个标记为“强制关闭”的按钮
  • 是的,但是您会收到一个更具体的错误,其中包括日志输出中出现错误的代码中的行号。无论如何,我已经在下面的回答中准确指出了您的问题所在。
  • 该警报对话框不会详细说明您的错误。您最好发布 logcat(在 eclipse 中,切换到“DDMS”透视图以查看 logcat)以便我们提供帮助。
  • 我很抱歉@goto10,我不知道 logcat 在 DDMS 中。我已经发布了 logcat。

标签: android android-activity switch-statement


【解决方案1】:

我猜问题出在你的 xml 文件中。

您正在使用 ListView,其 id 是您提供的自定义 one(android:id="@+id/myListView" - something like this),这是错误的。如果您将自己的 id 提供给 ListView,则必须通过 Activity 而不是 ListActivity 扩展您的类,并找到 ListView 的 id 并对其执行操作。

在您的情况下,当您通过 ListActivity 扩展类时,您应该使用 ListView 的 id 作为android:id="@android:id/list"

如果您通过 Activity 扩展课程 - android:id="@+id/myListView"。 否则,如果您使用 ListActivity - android:id="@android:id/list"

【讨论】:

    【解决方案2】:

    您的 Activity 类名为 myProject,而主要 Activity 的名称为“.main”。您还在清单中列出了两次“.main”。

    删除对“.main”的第二个引用,并确保清单中的活动名称与活动的类名匹配。

    像这样:

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myProject"
                  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=".login"></activity>
        <activity android:name=".register"></activity>
    </application>
    

    【讨论】:

    • 我已经更改了它,它仍然错误并且控制台中没有错误。如果你不介意我可以问你的电子邮件,以便我可以将我的项目发送给你检查吗? @goto10
    • 很抱歉,我的周末即将结束,没有空闲时间查看您的项目。我会根据您所做的任何更改使用您当前版本的清单更新问题,并根据@Huang 提供的说明从 logcat 获取错误
    【解决方案3】:

    由于你没有发布你的布局xml文件,我想问一下,你确定,你需要使用ListActivity吗?请查看相同here 的基本思想,并在您的项目中尝试使用 Acitivity 代替 ListActivity。您的 logcat 在第一行显示了与此相关的内容。

    【讨论】:

      【解决方案4】:

      确保您在程序的 xml 清单中声明了活动。如果他们不是你的程序将永远崩溃

      【讨论】:

      • 我已经做到了。我确定它已在 AndroidManifest.xml 中声明,但仍然崩溃。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多