按下按钮时应用程序崩溃

时间:2016-11-15 19:52:05

标签: java android

当我按下按钮时,应用程序崩溃(这是xml文件)

<Button
    android:text="Beginn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/startButton"
    android:onClick="getJson"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

按下按钮时运行的代码。

public void getJson(){
    editSummoner =(EditText) findViewById(R.id.editSummoner);
    if (editSummoner.getText().length() == 0){
        Toast.makeText(getBaseContext(),"Please enter a summoner name",
                Toast.LENGTH_LONG).show();
    }
    else if (editSummoner.getText().length() >= 1) {
        Toast.makeText(getBaseContext(),"Summoner name is " + editSummoner.getText().toString(),
                Toast.LENGTH_LONG).show();
    }
}

欢迎任何建议,我查看了所有其他代码并没有发现任何错误。此外,当删除此部分代码但该按钮无法正常工作时,该应用程序仍可正常工作。

崩溃报告(Android监视器):

11-15 20:56:20.137 29501-29501/com.example.user.lolstats E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.user.lolstats, PID: 29501
                                                                       java.lang.IllegalStateException: Could not find method getJson(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'startButton'
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
                                                                           at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                                                                           at android.view.View.performClick(View.java:5702)
                                                                           at android.widget.TextView.performClick(TextView.java:10888)
                                                                           at android.view.View$PerformClick.run(View.java:22541)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:158)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

3 个答案:

答案 0 :(得分:1)

期望方法k的参数为getJson(View),您定义了一个没有参数的方法View

答案 1 :(得分:0)

您必须为您的方法提供View参数。 将您的方法更改为:

public void getJson(View v){
    editSummoner =(EditText) findViewById(R.id.editSummoner);
    if (editSummoner.getText().length() == 0){
        Toast.makeText(getBaseContext(),"Please enter a summoner name",
            Toast.LENGTH_LONG).show();
    }
    else if (editSummoner.getText().length() >= 1) {
        Toast.makeText(getBaseContext(),"Summoner name is " + editSummoner.getText().toString(),
            Toast.LENGTH_LONG).show();
    }
}

答案 2 :(得分:0)

你应该尝试相反的方式。

从xml文件中删除onClick行。并以编程方式将按钮与方法粘合在一起:

在你的onCreate方法中:

Button startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        getJson(); // or you can write here the actual code.
    }
});