-1

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

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

小猪.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: 无法将“”解析为整数

4

1 回答 1

2

如果您没有填写其中一个 EditText,这将返回一个空字符串"",尝试从空字符串中解析整数会给您一个数字格式异常

你应该先检查:

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
于 2012-06-21T22:12:01.443 回答