java - 无效的 double : "" when calling EditText,,但在相同方法中未从其他人处获得

标签 java android

所以我在尝试执行代码时遇到了一些错误。 我有两个复选框来隐藏/显示某些字段以供用户输入数据。

这是代码 fragment :

public void checkBoxes(View v){
        CheckBox checkBox = (CheckBox) findViewById(R.id.IKnowInterest);
        CheckBox checkBox1 = (CheckBox) findViewById(R.id.IKnowYears);
        EditText interest = (EditText) findViewById(R.id.YearlyInterestField);
        EditText yearsToSave = (EditText) findViewById(R.id.YearsToSaveField);
        if (checkBox.isChecked()){
            interest.setVisibility(View.VISIBLE);
            yearsToSave.setVisibility(View.INVISIBLE);
        }

        if (checkBox1.isChecked()){
            interest.setVisibility(View.INVISIBLE);
            yearsToSave.setVisibility(View.VISIBLE);
        }


    }

根据是否选中一个或另一个框,我调用两种不同的方法(不要介意其中的代码,我现在只是在玩这些):

private double iKnowYears(double M, double P, double s, double q, double n){
        double i =0;
        double A;
        n = 25;
        while(true){
            i=i+0.01;
            A = (P*(Math.pow(1+(i/q), (n*q)))) + (M*((Math.pow((1+(i/q)), (n*q) ))-1) * (q / i));
            if (((A*i)-A) >= 12*s){
                break;
            }
        }
        return i;
    }

    private double iKnowInterest(double M, double P, double s, double q, double i){
        double n = 0;
        double A;
        while(true){
            A = (P*(Math.pow(1+(i/q), (n*q)))) + (M*((Math.pow((1+(i/q)), (n*q) ))-1) * (q / i));
            if ((A*i)-A >= 12*s){
                break;
            }
            n++;
        }
        return n;
    }

现在这是引发错误的部分:

public void moneyVsSalary(View v){
        CheckBox checkBox = (CheckBox) findViewById(R.id.IKnowInterest);
        Button button = (Button) findViewById(R.id.Calculate);
        EditText salary = (EditText) findViewById(R.id.SalaryField);
        EditText initialInvestment = (EditText) findViewById(R.id.InitialInvestmentField);
        EditText monthlyInvestment = (EditText) findViewById(R.id.MonthlyDepositField);
        EditText interest = (EditText) findViewById(R.id.YearlyInterestField);
        EditText yearsToSave = (EditText) findViewById(R.id.YearsToSaveField);
        double s = Double.parseDouble(salary.getText().toString());
        double P = Double.parseDouble(initialInvestment.getText().toString());
        double M = Double.parseDouble(monthlyInvestment.getText().toString());
        double q = 12;
        double n = Double.parseDouble(yearsToSave.getText().toString());
        double i = Double.parseDouble(interest.getText().toString())/100;
        //Checks if either interest och year checkboxes are checked.
        if (checkBox.isChecked()){
            button.setText(Double.toString(iKnowInterest(M, P, s, q, i)) + " years");
        }
        else{
            button.setText(Double.toString(iKnowYears(M, P, s, q, n)) + " % per year");
        }
    }

根据选中的框,它是 double n = Double.parseDouble(yearsToSave.getText().toString());double i = Double.parseDouble(interest.getText() .toString())/100; 抛出错误。

我一直在试图找出为什么这些语句会抛出错误,而其余语句则不会。 这是 XML 部分的代码:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.segmeier.financecalc.SalaryVSMoneyYield"
    android:nestedScrollingEnabled="false">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/SalaryField"
        android:layout_centerHorizontal="true"
        android:hint="@string/salary_today"
        android:layout_marginTop="200dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/InitialInvestmentField"
        android:layout_below="@+id/SalaryField"
        android:hint="@string/starting_amount"
        android:layout_centerHorizontal="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/MonthlyDepositField"
        android:layout_below="@+id/InitialInvestmentField"
        android:hint="@string/monthly_installments"
        android:layout_centerHorizontal="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/YearlyInterestField"
        android:layout_below="@+id/YearsToSaveField"
        android:hint="@string/interest_per_year"
        android:layout_centerHorizontal="true"
        android:visibility="invisible"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/YearsToSaveField"
        android:layout_below="@+id/MonthlyDepositField"
        android:hint="@string/years_to_save"
        android:layout_centerHorizontal="true"
        android:visibility="invisible"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/calculate"
        android:id="@+id/Calculate"
        android:layout_below="@+id/YearlyInterestField"
        android:layout_margin="10dp"
        android:layout_centerHorizontal="true"
        android:onClick="moneyVsSalary" />

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/iknowhowmanyyearsIWantToSave"
        android:id="@+id/IKnowYears"
        android:layout_above="@+id/InitialInvestmentField"
        android:layout_marginBottom="50dp"
        android:layout_alignLeft="@+id/InitialInvestmentField"
        android:layout_alignRight="@+id/InitialInvestmentField"
        android:checked="false"
        android:onClick="checkBoxes"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/IKnowInterest"
        android:id="@+id/IKnowInterest"
        android:layout_above="@+id/IKnowYears"
        android:layout_marginBottom="1dp"
        android:layout_alignLeft="@+id/InitialInvestmentField"
        android:layout_alignRight="@+id/InitialInvestmentField"
        android:checked="false"
        android:onClick="checkBoxes"/>


</RelativeLayout >

非常感谢任何和所有帮助!

最佳答案

JTextField 兴趣或yearsToSave 为空,具体取决于复选框,因此仅在选中复选框时才获取相关值。像这样更改您的代码:

 //Checks if either interest och year checkboxes are checked.
 if (checkBox.isChecked()) {
     double i = Double.parseDouble(interest.getText().toString())/100;
     button.setText(Double.toString(iKnowInterest(M, P, s, q, i)) + " years");
 } else {
     double n = Double.parseDouble(yearsToSave.getText().toString());
     button.setText(Double.toString(iKnowYears(M, P, s, q, n)) + " % per year");
 }

关于java - 无效的 double : "" when calling EditText,,但在相同方法中未从其他人处获得,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30216953/

相关文章:

android - 无法使用 PreferenceActivity 设置首选项

android - 将图像从相机加载到 Fragment 中的 ImageView

java - 在发票文档上添加行时出现错误 R6025 - SAP DiApi

java - 小程序 - 无法写入文件

java - 如何在 Java Swing 应用程序中嵌入 QWebView (QtJambi)?

java - InnoDB 数据库锁定会阻塞线程

c# - 如何将游戏对象(预制文件夹)显示为图像?

java - 在 Jar 中读取和写入文件

android - Http 请求在 Flutter 中不返回任何内容,也不会抛出任何错误

android - XmlPullParserException 应为 end_tag