【问题标题】:FATAL EXPECTION : main致命例外:主要
【发布时间】:2014-02-11 16:34:52
【问题描述】:

我今天开始编写应用程序,我必须说我是一个完全的初学者。
我正在使用 Eclipse 编写 Android 应用程序。
我刚开始构建最简单的东西,但是,看起来很糟糕......
我不明白为什么我不能这样做。
我正在尝试将写入文本框中的文本(在 Android SDK 中称为 Edittext)复制到字符串变量。
此过程应在按下 Button 按钮时开始。

这是我的代码:

public class MainActivity extends Activity  {

String verb_2;
String adjektiv_2;
String ort_2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void Anleitung (View view)
{
    setContentView(R.layout.instruction);
}
public void multi_2 (View view)
{
    setContentView(R.layout.multiplayer_2_1);
}

public void multi_4 (View view)
{
    setContentView(R.layout.multiplayer_4_1);
}

public void exit (View view) 
{
    finish();
    System.exit(0);
}
public void instruction_back (View view)
{
    setContentView(R.layout.activity_main);
}


public void button1 (View view)
{
    EditText nomen_2_box = (EditText)findViewById(R.id.editText1);
    String nomen_2= nomen_2_box.getText().toString();
}

最后是崩溃报告:

02-11 16:17:03.663: E/AndroidRuntime(988): FATAL EXCEPTION: main
02-11 16:17:03.663: E/AndroidRuntime(988): java.lang.IllegalStateException: Could not find a method multi_next_1(View) in the activity class com.kaltech.creasedstory.MainActivity for onClick handler on view class android.widget.Button with id 'button1'
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.view.View$1.onClick(View.java:3578)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.view.View.performClick(View.java:4084)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.view.View$PerformClick.run(View.java:16966)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.os.Handler.handleCallback(Handler.java:615)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.os.Looper.loop(Looper.java:137)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.app.ActivityThread.main(ActivityThread.java:4745)
02-11 16:17:03.663: E/AndroidRuntime(988):  at java.lang.reflect.Method.invokeNative(Native Method)
02-11 16:17:03.663: E/AndroidRuntime(988):  at java.lang.reflect.Method.invoke(Method.java:511)
02-11 16:17:03.663: E/AndroidRuntime(988):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-11 16:17:03.663: E/AndroidRuntime(988):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-11 16:17:03.663: E/AndroidRuntime(988):  at dalvik.system.NativeStart.main(Native Method)
02-11 16:17:03.663: E/AndroidRuntime(988): Caused by: java.lang.NoSuchMethodException: multi_next_1 [class android.view.View]
02-11 16:17:03.663: E/AndroidRuntime(988):  at java.lang.Class.getConstructorOrMethod(Class.java:460)
02-11 16:17:03.663: E/AndroidRuntime(988):  at java.lang.Class.getMethod(Class.java:915)
02-11 16:17:03.663: E/AndroidRuntime(988):  at android.view.View$1.onClick(View.java:3571)
02-11 16:17:03.663: E/AndroidRuntime(988):  ... 11 more

谁能解释我做错了什么?
也许为什么?

我想是因为这个

public void button1(查看视图){ EditText nomen_2_box = (EditText)findViewById(R.id.editText1);
字符串 nomen_2= nomen_2_box.getText().toString(); }

但我找不到任何解决方案:(

谢谢大家!

【问题讨论】:

    标签: java android eclipse


    【解决方案1】:

    当您在 xml 中将 onClick 方法声明为按钮的属性时,将引发此异常:

    <Button
        android:onClick="multi_next_1"/>
    

    这告诉 Android 寻找一个名为 multi_next_1 的方法,在您的 Activity 中带有一个单独的 View 参数。您可以像这样在 xml 中正确声明您的方法

    android:onClick="button1"
    

    或更改方法的名称以匹配您在 xml 中的声明,如下所示:

    public void multi_next_1 (View view)
    {
        EditText nomen_2_box = (EditText)findViewById(R.id.editText1);
        String nomen_2= nomen_2_box.getText().toString();
    }
    

    就个人而言,我会使用驼峰式命名,但我想这是风格问题。如果您有任何不清楚的地方,请告诉我。

    【讨论】:

    • +1 用于描述遇到的具体问题 2 种解决方法。
    • 不客气!记得在可能的时候休息一下,让你保持新鲜;)我可以请你通过点击绿色的小“V”来标记这个答案(或你可能喜欢的任何其他答案)吗?先感谢您 ! @Takendarkk,谢谢,非常感谢 :)
    • 哦,对不起:s 完成! :))
    • 没问题。实际上,这样做会从“活跃”问题中删除问题(从而保持这个美妙的网站干净整洁),并为我们俩带来一些声誉。正如您将在您的个人资料中看到的那样,您现在有 8 个代表(2 个来自接受答案,5 个来自我所做的支持)。快乐编码 ;)
    【解决方案2】:

    将方法名称从 button1 更改为 multi_next_1

    【讨论】:

    • 如果你修改你的答案来解释编译器正在寻找什么,而不是仅仅告诉他要写什么代码,你肯定会得到支持。
    • 我同意你的看法@John .. 从现在开始我会牢记这一点。感谢您的提示。
    【解决方案3】:

    你的问题来了

    public void button1 (View view)
    {
        EditText nomen_2_box = (EditText)findViewById(R.id.editText1);
        String nomen_2= nomen_2_box.getText().toString();
    }
    

    改成

    public void multi_next_1 (View view)
        {
            EditText nomen_2_box = (EditText)findViewById(R.id.editText1);
            String nomen_2= nomen_2_box.getText().toString();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2014-09-11
      • 2014-09-10
      • 2013-02-14
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多