【问题标题】:Unfortunately, my Android app has stopped不幸的是,我的 Android 应用程序已停止
【发布时间】:2012-08-27 08:12:59
【问题描述】:

我对 Android 开发非常陌生,所以我很困惑,当我制作了一个非常简单的应用程序时,却得到了一个非常非描述性的错误:“不幸的是,MyApp 已停止”。没有语法错误。只是这个有点无益的信息。这就是我所做的。

  1. 制作了一个新的应用项目(Android 4.1)
  2. 制作了一个按钮 - button1
  3. 在活动类中创建了一个 java 方法 - DoStuff()(见下文)
  4. 在活动对话框 xml 按钮中添加了对 DoStuff 的调用(见下文)
  5. 以 Android 应用程序运行项目
  6. 按下按钮
  7. 出现错误

方法:

public void DoStuff(){
    TextView tv = (TextView)this.findViewById(R.id.textView1);
    tv.setText("Hello dude");
}

按钮xml:

 <Button
        android:id="@+id/button1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/textView1"
        android:layout_marginTop="82dp"
        android:text="Button"
        android:onClick="DoStuff" />

我希望你能帮助我。

【问题讨论】:

  • 我知道 R.id 会导致一些奇怪的东西,因为某些库会干扰它......
  • 发布您的 logcat 消息以及您的主要活动的更多代码。
  • 有一个好东西叫做LogCat - 在这里查找错误。此外,最好在这种情况下使用断点来定位错误。
  • 发布style资源标记。
  • 以后会发布更多的调试。谢谢:)

标签: java android android-emulator


【解决方案1】:

在 Android 中,对于不同类型的事件和动作,各自的侦听器都有其指定的函数签名。 例如,对于按钮的动作监听器,函数必须具有以下签名:

public void functionName(View view);

在您的布局文件中,对于 Button 的 onClick 属性,您只需要提供函数名称..

其中 View 参数告诉视图对象触发了该操作(例如,您的案例中的按钮)

【讨论】:

    【解决方案2】:

    我在其他地方找到了解决方案。看来 DoStuff 需要将 View 作为参数,因此看起来像这样:

    public void DoStuff(View v){
        TextView tv = (TextView)this.findViewById(R.id.textView1);
        tv.setText("Hello dude");
    }
    

    为什么,我不知道,但它有效 :-)

    【讨论】:

    • 当您说 onClick:DoStuff 时,它查找的签名是 DoStuff(View v),其中按钮作为 View 传递。如果不输入参数,则找不到函数! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多