2014-02-28 43 views
0

我在我的程序中有2个Edittext和一个按钮。我想检查edittexts的内容是否匹配模式,它会执行一些计算。因此,点击按钮,在我的Java文件中创建了相应的方法,但我一直在我的日志猫中收到错误。这是我的onClick方法。在提交时验证字段

public void multiply(){ 
    final EditText start = (EditText) findViewById(R.id.editText_InputStart); 
    final EditText stop = (EditText) findViewById(R.id.editText_InputStop); 

    if(start.getText().toString().length() == 0){ 
     start.setError("Enter at least a Number"); 
     if(!start.getText().toString().matches("[0-9]")){ 
      start.setError("Enter a Number"); 
      if (stop.getText().toString().length() == 0){ 
       stop.setError("Enter at least a Number"); 
       if (!stop.getText().toString().matches("[0-9]")){ 
        stop.setError("Enter a Number"); 
       } 
      } 
     } 
    } else{ 
     calculate(start.getText().toString(), stop.getText().toString()); 
    }    
} 

这是log cat错误。

02-28 06:38:52.308: E/AndroidRuntime(1125): FATAL EXCEPTION: main 
02-28 06:38:52.308: E/AndroidRuntime(1125): Process: com.wecanIT.multiplicationtables,  PID: 1125 
02-28 06:38:52.308: E/AndroidRuntime(1125): java.lang.IllegalStateException: Could not find a method multiply(View) in the activity class com.wecanIT.multiplicationtables.MultiplyMainActivity for onClick handler on view class android.widget.Button with id 'process' 
02-28 06:38:52.308: E/AndroidRuntime(1125): at android.view.View$1.onClick(View.java:3810) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.view.View.performClick(View.java:4438) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.view.View$PerformClick.run(View.java:18422) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.os.Handler.handleCallback(Handler.java:733) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.os.Handler.dispatchMessage(Handler.java:95) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.os.Looper.loop(Looper.java:136) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at dalvik.system.NativeStart.main(Native Method) 
02-28 06:38:52.308: E/AndroidRuntime(1125): Caused by: java.lang.NoSuchMethodException: multiply [class android.view.View] 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at java.lang.Class.getConstructorOrMethod(Class.java:472) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at java.lang.Class.getMethod(Class.java:857) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  at android.view.View$1.onClick(View.java:3803) 
02-28 06:38:52.308: E/AndroidRuntime(1125):  ... 11 more 

发现问题在我的日志猫我的方法乘法应该接受一个参数查看感谢所有。

谢谢。

+0

请张贴堆栈跟踪 –

+0

发表您的堆栈跟踪,并计算();方法代码 –

+0

按要求您应该发布堆栈跟踪。然而你的方法中有一个逻辑错误。你正在检查是否开始是空的,如果它是空的,你正在检查它是否是一个数字?相同的停止。你也在浪费时间和空间。你应该做一些像'String startStr = start.getText()。toString();'并在该参数上查询 – royB

回答

0

的问题是简单地用的onClick方法的按钮。它是为了接受我忘了传递一个视图参数因此,代码应该是:

public void multiply(View v){ 
    final EditText start = (EditText) findViewById(R.id.editText_InputStart); 
    final EditText stop = (EditText) findViewById(R.id.editText_InputStop); 
    String regEx = "[0-9]{1,3}"; 
    String str = start.getText().toString(); 
    String str1 = stop.getText().toString(); 

    if (str.length() != 0 && str.matches(regEx) && str1.length() != 0 && str1.matches(regEx)){ 
     calculate(str,str1); 
       } else if(str.length() == 0 || !str.matches(regEx)) { 
     start.setError("Enter a Number"); 
    } else if (str1.length() == 0 || !str1.matches(regEx)){ 
     stop.setError("Enter a Number"); 
    } 

} 
2

首先在xml文件中将define inputType定义为EditText

android:inputType="number" 

,并检查这样的:

String errorMsg = ""; 
String str = edittext.getText().toString(); 
    if (checkInputAvailable(str)){ 
//do your work 
}else{ 
Toast.makeText(context, ""+errorMsg, Toast.LENGTH_SHORT).show(); 
} 
private boolean checkInputAvailable(String str) { 
    boolean retVal = true; 

    if (str.length() == 0) { 
     errorMsg = "Enter at least a Number"; 
     retVal = false; 
    } else if (!TextUtils.isDigitsOnly(str)) { 
     errorMsg = "Enter a Number"; 
     retVal = false; 
    } 

    return retVal; 

}