2017-04-09 36 views
0

我是Android开发新手,已开始构建计算器应用程序。我完成了代码并拥有所有按钮及其功能。该代码不显示任何错误,并启动应用程序罚款,但是当我点击一个按钮,它给了我错误:无法执行android的方法:Onclick。这里是我的代码:Android Studio计算器应用程序 - 无法执行Android的方法:OnClick

public class MainActivity extends AppCompatActivity { 


private BigDecimal a,b,calculation; 
private TextView answer; 
private Double conv1, conv2, sqrt1, sqrtcalc; 
private int power; 
private String str, result, sign, str2, pow, sqrt; 

public void number (View view) { 

    Button button = (Button) view; 
    str += button.getText().toString(); 
    answer.setText(str); 
    conv1 = Double.parseDouble(str); 
    a = BigDecimal.valueOf(conv1); 


} 

public void operation (View view) { 

    Button button = (Button) view; 

    sign = button.getText().toString(); 
    answer.setText(str + "."); 
    str = ""; 

} 

public void Calculation (View view) { 

    Button button = (Button) view; 
    str2 = answer.getText().toString(); 
    conv2 = Double.parseDouble(str2); 
    b = BigDecimal.valueOf(conv2); 

    if (sign.contentEquals("+")) { 

     calculation = a.add(b); 
     result = calculation.toString(); 

    } else if (sign.contentEquals("-")) { 

     calculation = a.subtract(b); 
     result = calculation.toString(); 

    } else if (sign.contentEquals("X")) { 

     calculation = a.multiply(b); 
     result = calculation.toString(); 

    } else if (sign.contentEquals("÷")) { 

     a.divide(b); 
     result = calculation.toString(); 

    } else if (sign.contentEquals("x^n")){ 

     pow = b.toString(); 
     power = Integer.parseInt(pow); 
     calculation = a.pow(power); 
     result = calculation.toString(); 

    } else if (sign.contentEquals("√")) { 

     sqrt = a.toString(); 
     sqrt1 = Double.parseDouble(sqrt); 
     sqrtcalc = Math.sqrt(sqrt1); 
     result = sqrtcalc.toString(); 

    } else { 


    } 

    answer.setText(result); 

} 

public void Clear (View view) { 

    Button button = (Button) view; 
    answer.setText(""); 
    str = ""; 
    str2 = ""; 
    result = ""; 
    pow = ""; 
    sign = ""; 
    sqrt = ""; 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    answer = (TextView) findViewById(R.id.textView2); 

} 
} 

这是我所有的代码,我将不插入XML布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.tejasmehta.tejascalc.MainActivity"> 

<Button 
    android:text="3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button5" 
    android:layout_alignBaseline="@+id/button1" 
    android:layout_alignBottom="@+id/button1" 
    android:layout_toRightOf="@+id/button2" 
    android:layout_toEndOf="@+id/button2" 
    android:onClick="number" /> 

<Button 
    android:text="2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button2" 
    android:layout_alignBaseline="@+id/button1" 
    android:layout_alignBottom="@+id/button1" 
    android:layout_toRightOf="@+id/button1" 
    android:layout_toEndOf="@+id/button1" 
    android:onClick="number" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button3" 
    android:text="+" 
    android:layout_alignBaseline="@+id/button5" 
    android:layout_alignBottom="@+id/button5" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:onClick="operation" /> 

<Button 
    android:text="5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button7" 
    android:layout_alignBaseline="@+id/button4" 
    android:layout_alignBottom="@+id/button4" 
    android:layout_toRightOf="@+id/button4" 
    android:layout_toEndOf="@+id/button4" 
    android:onClick="number" /> 

<Button 
    android:text="6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button8" 
    android:layout_alignBaseline="@+id/button7" 
    android:layout_alignBottom="@+id/button7" 
    android:layout_toRightOf="@+id/button7" 
    android:layout_toEndOf="@+id/button7" 
    android:onClick="number" /> 

<Button 
    android:text="-" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button9" 
    android:layout_alignBaseline="@+id/button8" 
    android:layout_alignBottom="@+id/button8" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:onClick="operation" /> 

<Button 
    android:text="8" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button6" 
    android:layout_alignBaseline="@+id/button14" 
    android:layout_alignBottom="@+id/button14" 
    android:layout_toRightOf="@+id/button14" 
    android:layout_toEndOf="@+id/button14" 
    android:onClick="number" /> 

<Button 
    android:text="7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button14" 
    android:layout_alignBaseline="@+id/button11" 
    android:layout_alignBottom="@+id/button11" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:onClick="number" /> 

<Button 
    android:text="x " 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button12" 
    android:layout_below="@+id/button8" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginTop="17dp" 
    android:onClick="operation" /> 

<Button 
    android:text="9" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button11" 
    android:layout_alignBaseline="@+id/button12" 
    android:layout_alignBottom="@+id/button12" 
    android:layout_toRightOf="@+id/button6" 
    android:layout_toEndOf="@+id/button6" 
    android:onClick="number" /> 

<Button 
    android:text="4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button4" 
    android:layout_marginTop="18dp" 
    android:layout_below="@+id/button1" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:onClick="number" /> 

<Button 
    android:text="0" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button10" 
    android:layout_marginTop="21dp" 
    android:layout_below="@+id/button6" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_toLeftOf="@+id/button11" 
    android:layout_toStartOf="@+id/button11" 
    android:onClick="number" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button21" 
    android:layout_alignBaseline="@+id/button10" 
    android:layout_alignBottom="@+id/button10" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:text="÷" 
    android:onClick="operation" /> 

<Button 
    android:text="." 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button20" 
    android:layout_alignBaseline="@+id/button10" 
    android:layout_alignBottom="@+id/button10" 
    android:layout_toRightOf="@+id/button10" 
    android:layout_toEndOf="@+id/button10" 
    android:onClick="number" /> 

<Button 
    android:text="√" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/button10" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="24dp" 
    android:id="@+id/button22" 
    android:onClick="operation" /> 

<Button 
    android:text="x^n" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/button22" 
    android:layout_toRightOf="@+id/button22" 
    android:layout_toEndOf="@+id/button22" 
    android:id="@+id/button23" 
    android:onClick="operation" /> 

<Button 
    android:text="C" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button24" 
    android:layout_alignBaseline="@+id/button23" 
    android:layout_alignBottom="@+id/button23" 
    android:layout_toRightOf="@+id/button23" 
    android:layout_toEndOf="@+id/button23" 
    android:onClick="Clear" /> 

<Button 
    android:text="=" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/button24" 
    android:layout_toRightOf="@+id/button24" 
    android:layout_toEndOf="@+id/button24" 
    android:id="@+id/button25" 
    android:onClick="Calculation" /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="35dp" 
    android:id="@+id/textView2" 
    android:textSize="30sp" 
    android:layout_marginTop="58dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<Button 
    android:text="1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="30dp" 
    android:id="@+id/button1" 
    android:layout_below="@+id/textView2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:onClick="number" /> 

</RelativeLayout> 

这是错误消息:

java.lang.IllegalStateException: Could not execute method for android:onClick 
        at 

android.support.v7.app.AppCompatViewInflater$ 
DeclaredOnClickListener.onCli 
ck(AppCompatViewInflater.java:293) 
        at android.view.View.performClick(View.java:5610) 
        at 
android.view.View$PerformClick.run(View.java:22260) 
        at 
android.os.Handler.handleCallback(Handler.java:751) 
        at 
android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at 
android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller. 
run(ZygoteInit.java:865) 
        at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
       Caused by: java.lang.reflect.InvocationTargetException 
        at java.lang.reflect.Method.invoke(Native Method) 
        at 
android.support.v7.app.AppCompatViewInflater$ . 
DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
        at android.view.View.performClick(View.java:5610)  
        at 
android.view.View$PerformClick.run(View.java:22260)  
        at 
android.os.Handler.handleCallback(Handler.java:751)  
        at 
android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:154)  
        at 
android.app.ActivityThread.main(ActivityThread.java:6077)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller. 
run(ZygoteInit.java:865)  
        at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  
       Caused by: java.lang.NumberFormatException: For input 
string: "null8" 
        at 
java.lang.FloatingDecimal.readJavaFormatString . 
(FloatingDecimal.java:1306) 
        at java.lang.Double.parseDouble(Double.java:547) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
        at android.view.View.performClick(View.java:5610)  
        at 
android.view.View$PerformClick.run(View.java:22260)  
        at 
android.os.Handler.handleCallback(Handler.java:751)  
        at 
android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:154)  
        at 
android.app.ActivityThread.main(ActivityThread.java:6077)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at 

    com.android.internal.os.ZygoteInit$MethodAndArgsCaller. 
    run(ZygoteInit.java:865)  
        at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

第二崩溃:

java.lang.IllegalStateException: Could not execute method for 
android:onClick 
        at 
    android.support.v7.app.AppCompatViewInflater$ . 
    DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
        at android.view.View.performClick(View.java:5610) 
        at 
    android.view.View$PerformClick.run(View.java:22260) 
        at 
    android.os.Handler.handleCallback(Handler.java:751) 
        at 
    android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at 
    android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller. 
    run(ZygoteInit.java:865) 
        at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
       Caused by: java.lang.reflect.InvocationTargetException 
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
        at android.view.View.performClick(View.java:5610)  
        at android.view.View$PerformClick.run(View.java:22260)  
        at android.os.Handler.handleCallback(Handler.java:751)  
        at android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:154)  
        at android.app.ActivityThread.main(ActivityThread.java:6077)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  
       Caused by: java.lang.NumberFormatException: empty String 
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071) 
        at java.lang.Double.parseDouble(Double.java:547) 
        at com.tejasmehta.tejascalc.MainActivity.Calculation(MainActivity.java:52) 
        at java.lang.reflect.Method.invoke(Native Method)  
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
        at android.view.View.performClick(View.java:5610)  
        at android.view.View$PerformClick.run(View.java:22260)  
        at android.os.Handler.handleCallback(Handler.java:751)  
        at android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:154)  
        at android.app.ActivityThread.main(ActivityThread.java:6077)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

对不起,我i但是我已经看过了,他们的解决方案并没有帮助我。任何帮助将不胜感激!谢谢!

回答

0

在这一行:

str += button.getText().toString(); 

要添加空与按钮上的文字

java.lang.NumberFormatException: For input string: "null8"

则异常在这一行抛出:conv1 = Double.parseDouble(str);因为null8不能转换到双

所以添加到字符串前检查:

public void number(View view) { 

    String s = ""; 
    Button button = (Button) view; 
    s = button.getText().toString(); 
    if (s != null && str!=null) { 
     str += s; 
     answer.setText(str); 
    } 
    try { 
     conv1 = Double.parseDouble(str); 
     a = BigDecimal.valueOf(conv1); 
    } catch (Exception e) { 

    } 
} 
+0

这工作,但是当我输入计算器中的数字,它显示为空(编号),然后当我手术和第二个号码,它崩溃。为什么? –

+0

我编辑了条件...'if(s!= null && str!= null)'...并发布第二次崩溃的日志.. – rafsanahmad007

+0

第二次崩溃 –

0

看看这里有你有

1-当u使用rafsanahmad007的代码,如果条件不满足,这就是为什么没有变化发生时ü上按下数字键下面的问题....但为什么 好,这是因为str为nullü没有初始化,所以你必须在你的onCreate(捆绑savedInstanceState)方法添加 这str = ""任何地方

2 - 崩溃当U按下操作好,因为str为null和u使用它。 .. 所以当你解决1--然后2-自动解决

现在你可以按号码,然后操作则数都没有崩溃

希望这可以帮助的xD

相关问题