Основная деятельность, не присваивающая значения переменным - PullRequest
0 голосов
/ 15 февраля 2019

В моей задаче на домашнее задание я должен рассчитывать ежемесячный платеж по кредиту на основе процентной ставки по сумме кредита и продолжительности кредита, предоставленного пользователем.Это должно быть сделано с помощью намерения.

Когда я запускаю приложение, значения переменной никогда не меняются с 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;
    }
}

класс с именем MainActivity.java

   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);
    }
}

класс с именем paymentViewActivity.java

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));
    }

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Это потому, что у вас разные ключи при добавлении расширенных данных в намерение.Вы используете следующее в "Loan.loanAmount" ключе calculatePayment метод:

intent.putExtra("Loan.loanAmount", Double.valueOf(amount.toString()));

Но вы ожидаете "loanAmount" в paymentViewActivity классе:

public class paymentViewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ...
       double amount = intent.getDoubleExtra("loanAmount", loanAmount);
    }

пожалуйста, возьмитеобратите внимание, что Intent.putExtra(String, Value) использует формат значения ключа для параметра.Строка является ключевым идентификатором для определенного значения.

Итак, используйте тот же ключ для вашего putExtra.Более безопасный способ - использовать постоянную строку в качестве ключа в связанной деятельности.Например, используйте LOAN_AMOUNT_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);

    ...
 }

Примечание:

  1. Используйте правильное имя класса соглашения об именовании Java для своей деятельности.Например, используйте PaymentViewActivity вместо paymentViewActivity

  2. Избегайте использования public static для класса члена модели.Вам лучше использовать геттер / сеттер.

0 голосов
/ 15 февраля 2019
intent.putExtra(String.valueOf(Loan.interestRate), interest); --> wrong

intent.putExtra(String.valueOf(Loan.loanDuration), radio_b.getText().toString());

Вам нужно добавить имя строки только тогда, когда вы получите его из дополнений.

intent.putExtra("interest", interest);
intent.putExtra("loanduration", radio_b.getText().toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...