Android应用程序在按钮单击时崩溃

时间:2012-06-21 21:54:12

标签: java android eclipse

我的愚蠢再一次袭来。我要感谢所有在我之前的问题上帮助过我的人。我现在想要编辑的最后一件事。对于那些不知道的人,我正在使用Java在Eclipse中编写Android应用程序。在此活动上,当我单击计算按钮时,它崩溃了,我无法弄清楚原因。我有一个类似的问题,在类似的应用程序中缺少括号,但我无法解决这个问题。我发誓,我查看了拼写和单词的情况,没有看到任何东西。然而,了解我,这可能是出了什么问题。致谢!!!

PS。我的logcat没有错误,所以我真的不知道从哪里开始。如果有人可以指出我可能会给他们更多的东西,那么我很乐意提供帮助。

Piggy.Java

package net.finalexam;

import java.text.DecimalFormat;

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.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

public class Piggy extends Activity {
    double quartersValue = .25;
    double dimesValue   = .10;
    double nicklesValue  = .05;
    double penniesValue = .01 ;
    double dollarsValue = 1;
    double quartersMoney;
    double dollarsMoney;
    double dimesMoney;
    double nicklesMoney;
    double penniesMoney;
    double totalMoney;
    double newTotalMoney;
    double oldTotalMoney=0;
    int numberOfQuarters;
    int numberOfDimes;
    int numberOfNickles;
    int numberOfPennies;
    int numberOfDollars;



        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView (R.layout.piggybank);
            final EditText quarters =(EditText)findViewById(R.id.txtQuarters);
            final EditText dimes = (EditText)findViewById(R.id.txtDimes);
            final EditText nickles =(EditText)findViewById(R.id.txtNickles);
            final EditText pennies = (EditText)findViewById(R.id.txtPennies);
            final EditText dollars = (EditText)findViewById(R.id.txtDollars);
            Button calculate =(Button)findViewById(R.id.btnCalculate);
            final TextView results = ((TextView)findViewById(R.id.txtResults));
            final RadioButton add =(RadioButton)findViewById(R.id.radAdd);
            final RadioButton subtract =(RadioButton)findViewById(R.id.radSubtract);

                calculate.setOnClickListener(new OnClickListener(){

                    public void onClick(View v) {
                    numberOfQuarters = Integer.parseInt(quarters.getText().toString());
                    numberOfDimes = Integer.parseInt(dimes.getText().toString());
                    numberOfNickles = Integer.parseInt(nickles.getText().toString());
                    numberOfPennies = Integer.parseInt(pennies.getText().toString());
                    numberOfDollars = Integer.parseInt(dollars.getText().toString());
                    quartersMoney = numberOfQuarters * quartersValue;
                    dimesMoney = numberOfDimes * dimesValue;
                    nicklesMoney = numberOfNickles * nicklesValue;
                    penniesMoney = numberOfPennies * penniesValue;
                    dollarsMoney = numberOfDollars;
                    totalMoney= quartersMoney + dimesMoney + nicklesMoney + penniesMoney+dollarsMoney;
                    DecimalFormat currency = new DecimalFormat("$###,###.##");

                    if (add.isChecked()){
                        if(totalMoney>0){
                            newTotalMoney =oldTotalMoney +totalMoney;
                            oldTotalMoney = newTotalMoney;
                            results.setText(currency.format("newTotalMoney"));
                        }else{
                            Toast.makeText(Piggy.this, "You need to do more chores!!",Toast.LENGTH_LONG).show();

                        }
                    }
                    if (subtract.isChecked()){
                        newTotalMoney =oldTotalMoney +totalMoney;
                    }
                        if(newTotalMoney>0){

                            oldTotalMoney = newTotalMoney;
                            results.setText(currency.format("newTotalMoney"));
                        }else{
                            Toast.makeText(Piggy.this, "Save more money kido!!",Toast.LENGTH_LONG).show();
                        }
                        ;
                    }
            });
        }

}

以下是与文件一起使用的Piggy XML。如果有人能看到任何东西我会感激你的帮助。我也无法找到最好的方法来命名。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/piggy" >

    <EditText
        android:id="@+id/txtQuarters"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="27dp"
        android:ems="10"
        android:hint="Number of quarters"
        android:inputType="number" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/txtDimes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtQuarters"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="Number of dimes"
        android:inputType="number" />

    <EditText
        android:id="@+id/txtNickles"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtDimes"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="Number of nickles"
        android:inputType="number" />

    <EditText
        android:id="@+id/txtPennies"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtNickles"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="Number of pennies"
        android:inputType="number" />

    <TextView
        android:id="@+id/txtResults"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="38dp" />


    <EditText
        android:id="@+id/txtDollars"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtPennies"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="Number of Dollars"
        android:inputType="number" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtDollars"
        android:layout_centerHorizontal="true" >

        <RadioButton
            android:id="@+id/radAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="Add" />

        <RadioButton
            android:id="@+id/radSubtract"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Subtract" />
    </RadioGroup>

    <Button
        android:id="@+id/btnCalculate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/radioGroup1"
        android:layout_centerHorizontal="true"
        android:text="Calculate" />

</RelativeLayout>

编辑。多谢你们。这个网站对我来说真的是一个很大的帮助,是一个很好的资源。话虽如此,我找到了错误日志。

06-21 18:06:25.619:E / AndroidRuntime(26042):java.lang.NumberFormatException:无法解析''为整数

1 个答案:

答案 0 :(得分:2)

如果你没有填写一个EditTexts,这将返回一个空字符串"",试图从一个空字符串解析一个Integer将给你一个数字格式异常

你应该先检查一下:

if(!"".equals(yourString){
   int i = Integer.parseInt(yourString);
}

修改

您也尝试这样做:

 currency.format("newTotalMoney")

当你的意思是这样做时:

 currency.format(newTotalMoney)

编辑2

为了省时间你应该写一个像这样的方法:

private Integer getNumber(EditText editText){
     int num = 0;
     if(editText == null) {
       Log.e("YouApp", "Didnt find view");
       return num;
     }
     String input = editText.getText().toString();
     if(!"".equals(input)) {
        try{
           num = Integer.parseInt(input);
        } catch(NumberFormatException e){
          Log.("YouApp", "Invalid input: "+input, e);
        }
     }
     return num;
}

然后在您的应用中使用它:

 numberOfNickles = getNumber(nickles);
 numberOfPennies = getNumber(pennies);
 // etc