添加参数do方法后应用程序崩溃

时间:2013-11-03 15:24:20

标签: java android methods parameters crash

我的简单计算器应用程序出了问题:

当我有这样的方法时

public void WypiszWartoscPrzycisku(View sender)

它工作正常,一切都很好,但是当我添加浮动时,我的意思是:

public void WypiszWartoscPrzycisku(View sender, float num1)
它崩溃了。我不确定我应该多给什么,因为我没有对num1做任何事情而app仍然崩溃。

XML(对不起,我不是母语,所以我用我的语言命名的很多东西)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    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=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button_AC"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/AC"
            android:onClick="WypiszWartoscPrzycisku"/>

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/wynik"
            android:inputType="number" >

            <requestFocus />
        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_Siedem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/siedem" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Osiem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/osiem"
            android:onClick="WypiszWartoscPrzycisku" />

        <Button
            android:id="@+id/button_Dziewiec"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/dziewiec"
            android:onClick="WypiszWartoscPrzycisku" />


        <Button
            android:id="@+id/button_Plus"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/plus" 
            android:onClick="WypiszWartoscPrzycisku"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_Cztery"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/cztery" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Piec"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/piec" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Szesc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/szesc"
            android:onClick="WypiszWartoscPrzycisku" />

        <Button
            android:id="@+id/button_Minus"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/minus"
            android:onClick="WypiszWartoscPrzycisku" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_Jeden"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/jeden" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Dwa"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/dwa" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Trzy"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/trzy"
            android:onClick="WypiszWartoscPrzycisku" />

        <Button
            android:id="@+id/button_Mnozenie"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/mnozenie"
            android:onClick="WypiszWartoscPrzycisku" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_Zero"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/zero" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_Kropka"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/kropka" />

        <Button
            android:id="@+id/buttonRownasie"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/rownasie" 
            android:onClick="WypiszWartoscPrzycisku"/>

        <Button
            android:id="@+id/button_dzielenie"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/dzielenie"
            android:onClick="WypiszWartoscPrzycisku" />
    </LinearLayout>

</LinearLayout>

编辑:

谢谢@beworker和@Raghunandan的答案。我知道了。我虽然添加参数do方法将解决我的主要问题。我的代码是(改为英文名字)         switch(bt.getId()){

    case R.id.button_AC:
        display.setText("");
        break;

    case R.id.button_Plus:
        float num1 = Float.parseFloat(actualText.toString());
        display.setText("");
        break;

    case R.id.buttonEquals:
        float num2 = Float.parseFloat(actualText.toString());
        float num3 = num1+num2;
        String result  = Float.toString(num3);
        display.setText(wynik);

它说,在最后case R.id.Equalsnum1未被宣布。 感谢:)

2 个答案:

答案 0 :(得分:1)

在布局xml中看起来你有一个带有以下属性的按钮

  android:onClick="WypiszWartoscPrzycisku"

所以你需要

  public void WypiszWartoscPrzycisku(View sender) // method signature should be like this
  {

  }  

android:onClick

单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)

http://developer.android.com/reference/android/view/View.html#attr_android:onClick

如果你有这个

 public void WypiszWartoscPrzycisku(View sender, float num1)

您的活动没有WypiszWartoscPrzycisku(View sender)这是必须的,因为您有android:onClick="WypiszWartoscPrzycisku",当您点击按钮时,您获得异常无法在活动中找到方法WypiszWartoscPrzycisku(View)

编辑:

    case R.id.button_Plus:
    float num1 = Float.parseFloat(actualText.toString()); // declared and initialized here
    display.setText("");
    break;

但你在这里使用它

    case R.id.buttonEquals:
    float num2 = Float.parseFloat(actualText.toString());
    float num3 = num1+num2;

您需要将num1声明为类成员

编辑2:

   case R.id.buttonEquals: 
   //  check if you have a button with id R.id.buttonEquals

答案 1 :(得分:0)

您应始终仅使用第一种方法。这是Android将寻找的方法。您可以将它与每个Button一起使用,但是您需要检查发送者ID以执行适当的操作。这是一个例子。

public void WypiszWartoscPrzycisku(View sender) {
  if (sender.getId() == R.id.button_Cztery) {
    // execute code for button_Cztery
  } else if (sender.getId() == R.id.button_Dziewiec) {
    // execute code for button_Dziewiec
  } else if (sender.getId() == R.id.button_Plus) {
    // execute code for button_Plus
  }
}