Java 未为变量赋值的主活动

Java 未为变量赋值的主活动,java,android,android-intent,Java,Android,Android Intent,在我的家庭作业问题中,我应该根据用户提供的贷款金额、利率和贷款期限来计算每月的贷款付款。这要使用intent来完成 当我运行应用程序时,变量的值从不从0更改,然后它会转到应用程序的第二页,在那里应该显示结果,但它会显示NaN,在那里应该显示结果 我对Android开发非常陌生,我不知道问题发生在哪里,所以我发布了我所有的主要Java代码 名为Loan.java的类 package com.example.collegeloanpayoffcalculator; public class Loa

在我的家庭作业问题中,我应该根据用户提供的贷款金额、利率和贷款期限来计算每月的贷款付款。这要使用intent来完成

当我运行应用程序时,变量的值从不从0更改,然后它会转到应用程序的第二页,在那里应该显示结果,但它会显示NaN,在那里应该显示结果

我对Android开发非常陌生,我不知道问题发生在哪里,所以我发布了我所有的主要Java代码

名为Loan.java的类

package com.example.collegeloanpayoffcalculator;

public class Loan
{

    public static double loanAmount = 0.0;
    public static double interestRate = 0.0;
    public static int loanDuration = 0;
    //public static double monthlyPayment = 0.0;
    public double amount;
    public double interest;
    public double duration;
    //public double payment;

    public Loan() {}

    public Loan(double amount, double interest, double duration)
    {
        this.amount = amount;
        this.interest = interest;
        this.duration = duration;
    }
}
   public void calculatePayment(View view)
    {
        Intent intent = new Intent(this, paymentViewActivity.class);
        EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
        Editable amount = loanAmount.getText();
        intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));

        EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
        Editable interest = interestRate.getText();
        intent.putExtra(String.valueOf(Loan.interestRate), interest);

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
        int selected_id = radioGroup.getCheckedRadioButtonId();
        RadioButton radio_b = (RadioButton) findViewById(selected_id);

        intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
        startActivity(intent);
    }
}
public class paymentViewActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_loan_payment);
        Intent intent = getIntent();
        double amount = intent.getDoubleExtra("loanAmount", loanAmount);
        double interest = intent.getDoubleExtra("interestRate", interestRate);

        int duration = intent.getIntExtra("loanDuration", loanDuration);

        double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));

        TextView Payment = findViewById(R.id.loanPayment);
        Payment.setText(Double.toString(payment));
    }
名为MainActivity.java的类

package com.example.collegeloanpayoffcalculator;

public class Loan
{

    public static double loanAmount = 0.0;
    public static double interestRate = 0.0;
    public static int loanDuration = 0;
    //public static double monthlyPayment = 0.0;
    public double amount;
    public double interest;
    public double duration;
    //public double payment;

    public Loan() {}

    public Loan(double amount, double interest, double duration)
    {
        this.amount = amount;
        this.interest = interest;
        this.duration = duration;
    }
}
   public void calculatePayment(View view)
    {
        Intent intent = new Intent(this, paymentViewActivity.class);
        EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
        Editable amount = loanAmount.getText();
        intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));

        EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
        Editable interest = interestRate.getText();
        intent.putExtra(String.valueOf(Loan.interestRate), interest);

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
        int selected_id = radioGroup.getCheckedRadioButtonId();
        RadioButton radio_b = (RadioButton) findViewById(selected_id);

        intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
        startActivity(intent);
    }
}
public class paymentViewActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_loan_payment);
        Intent intent = getIntent();
        double amount = intent.getDoubleExtra("loanAmount", loanAmount);
        double interest = intent.getDoubleExtra("interestRate", interestRate);

        int duration = intent.getIntExtra("loanDuration", loanDuration);

        double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));

        TextView Payment = findViewById(R.id.loanPayment);
        Payment.setText(Double.toString(payment));
    }
名为paymentViewActivity.java的类

package com.example.collegeloanpayoffcalculator;

public class Loan
{

    public static double loanAmount = 0.0;
    public static double interestRate = 0.0;
    public static int loanDuration = 0;
    //public static double monthlyPayment = 0.0;
    public double amount;
    public double interest;
    public double duration;
    //public double payment;

    public Loan() {}

    public Loan(double amount, double interest, double duration)
    {
        this.amount = amount;
        this.interest = interest;
        this.duration = duration;
    }
}
   public void calculatePayment(View view)
    {
        Intent intent = new Intent(this, paymentViewActivity.class);
        EditText loanAmount = (EditText) findViewById(R.id.loanAmount);
        Editable amount = loanAmount.getText();
        intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));

        EditText interestRate = (EditText) findViewById(R.id.interestRateEditText);
        Editable interest = interestRate.getText();
        intent.putExtra(String.valueOf(Loan.interestRate), interest);

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.duration);
        int selected_id = radioGroup.getCheckedRadioButtonId();
        RadioButton radio_b = (RadioButton) findViewById(selected_id);

        intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());
        startActivity(intent);
    }
}
public class paymentViewActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_loan_payment);
        Intent intent = getIntent();
        double amount = intent.getDoubleExtra("loanAmount", loanAmount);
        double interest = intent.getDoubleExtra("interestRate", interestRate);

        int duration = intent.getIntExtra("loanDuration", loanDuration);

        double payment = amount * interest / (1 - 1 / Math.pow(1 + interest, duration * 12));

        TextView Payment = findViewById(R.id.loanPayment);
        Payment.setText(Double.toString(payment));
    }
您只需要添加字符串名,然后您就可以从extras获得它

intent.putExtra("interest", interest);
intent.putExtra("loanduration", radio_b.getText().toString());

这是因为在意向中添加扩展数据时,您有不同的密钥。您正在
“Loan.loanAmount”
中使用以下输入
计算支付方法:

intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));
但是您希望在
paymentViewActivity
类中使用
“loanAmount”

public class paymentViewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ...
       double amount = intent.getDoubleExtra("loanAmount", loanAmount);
    }
请注意,
Intent.putExtra(字符串,值)
正在为参数使用键值格式。字符串是特定值的键标识符

因此,使用相同的键进行额外输入。更安全的方法是在相关活动中使用常量字符串作为键。例如,对贷款金额值使用
LOAN\u AMOUNT\u KEY
常量字符串:

public class paymentViewActivity extends AppCompatActivity {

  public static final String LOAN_AMOUNT_KEY = "loanAmountKey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ...

       // use the key to find the value
       // you won't use the incorrect key because
       // the key is tightly coupled to the activity
       double amount = intent.getDoubleExtra(LOAN_AMOUNT_KEY, loanAmount);
    }
}
然后,在
calculatePayment
方法中,在保存值时使用键:

public void calculatePayment(View view) {
    Intent intent = new Intent(this, paymentViewActivity.class);
    ...
    double amount = Double.valueOf(amount.toString());
    intent.putExtra(paymentViewActivity.LOAN_AMOUNT_KEY, amount);

    ...
 }

注意:

  • 为活动使用正确的java命名约定类名。例如,使用
    PaymentViewActivity
    代替
    PaymentViewActivity

  • 避免对模型成员类使用
    public static
    。你最好使用getter/setter

  • 尝试使用此库: