单击textBox或按钮外部强制关闭我的应用程序IllegalStateException

时间:2012-08-03 04:23:52

标签: android android-layout android-emulator android-widget android-sdk-2.3

以下是我使用的Java文件。所有代码都运行良好,但上面的错误仍然存​​在。有谁能看到这个问题?

package tip.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TipCalculator extends Activity 
{
    private Button enter;
    EditText myEditField;
    EditText myEditField2;
    float percentage = 0;
    float percentageInp = 0;
    float billAmount = 0;
    double output = 0; 
    String output1 = "";
    Button clearButton ;
    TextView textView;

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

        myEditField = (EditText) findViewById(R.id.percentText);
        enter = (Button)findViewById(R.id.button1);
        myEditField2 = (EditText) findViewById(R.id.billText);
        clearButton = (Button) findViewById(R.id.clearButton);

        enter.setOnClickListener( new OnClickListener() {
            public void onClick(View v) {
                TextView errors;
                textView = (TextView) findViewById(R.id.textView1);
                errors = (TextView) findViewById(R.id.textView4); 
                int a = 0;
                if(myEditField2.getText().toString().equals("")) {
                    errors.setText("Error");
                } else {
                    a++;
                }

                if(myEditField.getText().toString().equals("")){
                    errors.setText("Error");
                } else {
                    a++;
                }

                if(a == 2) {
                    percentageInp = Float.parseFloat(myEditField.getText().toString());
                    billAmount = Float.parseFloat(myEditField2.getText().toString());
                    percentage = ((float)percentageInp /100);

                    output = (double)(billAmount * percentage);

                    double result = output * 100;
                    result = Math.round(result);
                    result = result / 100;

                    output1 = Double.toString(result);

                    View.setText(output1 + " $");
                    errors.setText("");
                }
            }
        });

        clearButton.setOnClickListener( new OnClickListener() {
            public void onClick(View v) {
                TextView errors;
                textView = (TextView) findViewById(R.id.textView1);
                errors = (TextView) findViewById(R.id.textView4); 
                int a = 0;

                if (myEditField2.getText().toString().equals("")) {
                    myEditField.setText("");
                    percentage = 0;
                    percentageInp = 0;
                    billAmount = 0;
                    output = 0; 
                    textView.setText("");
                    output1 = "";
                } else {
                    a++;
                }

                if(myEditField.getText().toString().equals("")) {
                    myEditField2.setText("");
                    percentage = 0;
                    percentageInp = 0;
                    billAmount = 0;
                    output = 0; 
                    output1 = "";
                    textView.setText("");
                 } else {
                    a++;
                 }

                 if (a == 2) {
                    myEditField.setText("");
                    myEditField2.setText("");
                    percentage = 0;
                    percentageInp = 0;
                    billAmount = 0;
                    output = 0; 
                    output1 = "";

                    textView.setText("");
                    errors.setText("");
                }
            }
        });
    }
}

这是logcat,我得到一个我完全不明白的错误。我从不称呼方法 onEnterClick()

08-02 21:17:37.205: E/AndroidRuntime(27185): FATAL EXCEPTION: main
08-02 21:17:37.205: E/AndroidRuntime(27185): java.lang.IllegalStateException: Could not find a method onEnterClick(View) in the activity class tip.calculator.TipCalculator for onClick handler on view class android.widget.RelativeLayout with id 'errorText'
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.view.View$1.onClick(View.java:3085)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.view.View.performClick(View.java:3620)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.view.View$PerformClick.run(View.java:14292)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.os.Handler.handleCallback(Handler.java:605)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.os.Handler.dispatchMessage(Handler.java:92)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.os.Looper.loop(Looper.java:137)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.app.ActivityThread.main(ActivityThread.java:4507)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at java.lang.reflect.Method.invokeNative(Native Method)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at java.lang.reflect.Method.invoke(Method.java:511)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at dalvik.system.NativeStart.main(Native Method)
08-02 21:17:37.205: E/AndroidRuntime(27185): Caused by: java.lang.NoSuchMethodException: onEnterClick [class android.view.View]
08-02 21:17:37.205: E/AndroidRuntime(27185):    at java.lang.Class.getConstructorOrMethod(Class.java:460)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at java.lang.Class.getMethod(Class.java:915)
08-02 21:17:37.205: E/AndroidRuntime(27185):    at android.view.View$1.onClick(View.java:3078)
08-02 21:17:37.205: E/AndroidRuntime(27185):    ... 11 more

3 个答案:

答案 0 :(得分:3)

我认为你已经在XML Layout中定义了onclick方法。你已经在程序中编写了onclick监听器。从xml布局中删除以下行,您的程序运行正常:

android:onclick="onEnterClick"

答案 1 :(得分:1)

这是因为您将android:onClick="onEnterClick"设置为RelativeLayout而且,您未在TipCalculator.java文件中实现此功能。那么,IllegalStateException你有LogCat的第一行 -

  

在活动类tip.calculator.TipCalculator中找不到onEnterClick(View)方法,用于视图类android.widget.RelativeLayout上的onClick处理程序,其id为'errorText'

您可以通过以上异常线轻松理解。

答案 2 :(得分:0)

也许是因为你已经在xml的Button布局中声明了一个函数onEnterClick。按钮布局中会有android:onClick="onEnterClick这样的行。

因此,在

中按下该按钮时,请定义所需的操作
public void onEnterClick(View view) 
你的java类中的

注意:首先必须创建此功能。