简体   繁体   English

通过意图将类传递给活动(崩溃)

[英]Passing Class to activity via Intent (Crashes)

Basically, I've been working on a project where I am trying to pass object data to another activity. 基本上,我一直在一个项目中尝试将对象数据传递给另一个活动。 What I am trying to do: In my main Activity, I click on a button which redirects me to another activity and also passes data through intent which I can then view in that activity. 我要做什么:在主活动中,我单击一个按钮,该按钮将我重定向到另一个活动,并通过意图传递数据,然后可以在该活动中查看该意图。 Also, since it is an object, when I change it in this activity, I want it to also change in the Main Activity. 另外,由于它是一个对象,因此当我在此活动中对其进行更改时,我希望它也在主活动中也进行更改。 My problem is, when I first start the application, the object data is passed and I can see it in Toast. 我的问题是,当我第一次启动应用程序时,对象数据已传递并且可以在Toast中看到它。 However, once I put it into a Text View, it crashes and doesn't pass any data at all. 但是,一旦将其放入“文本视图”中,它就会崩溃并且根本不会传递任何数据。 The worst part is that Android Studio doesn't give me any errors for it. 最糟糕的是,Android Studio不会给我任何错误。

I've tried creating Intent different ways and even with a bundle. 我尝试过以不同的方式甚至使用捆绑包来创建Intent。 Nothing has been working. 什么都没做。 Also, I mentioned that Android Studio doesn't give me any errors, therefore, I don't even know what is making it crash specifically. 另外,我提到Android Studio不会给我任何错误,因此,我什至不知道是什么使它特别崩溃了。 Any help will be appreciated. 任何帮助将不胜感激。

This is my Account Class (Object): 这是我的帐户类别(对象):

public class Account {

    private int accountNumber;
    private double balance;
    private String bankName;

    public Account(int accountNumber, double balance, String bankName) {
        this.accountNumber = accountNumber;
        this.balance = balance;
        this.bankName = bankName;
    }

    public int getAccountNumber() {
        return accountNumber;
    }

    public double getBalance() {
        return balance;
    }

    public String getBankName() {
        return bankName;
    }

    public void withdraw(double amount) {
        balance -= amount;
    }

    public void deposit(double amount) {
        balance += amount;
    }
}

This is the Main Activity which I am using to pass the object (btnActivity2 calls an activity that is unrelated to this question): 这是我用来传递对象的主要活动(btnActivity2调用与该问题无关的活动):

public class MainActivity extends AppCompatActivity {
    Account account;
    private int accountNumber;
    private double balance;
    private String bankName;
    private Intent intent;
    private Button btnActivity2;
    private Button btnActivity3;
    private EditText etDisplay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnActivity2 = findViewById(R.id.btnActivity2);
        btnActivity2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent = new Intent(getApplicationContext(), Activity2.class);
                startActivity(intent);
            }
        });
        try {
            account = new Account(2078910, 100000, "Chase");
            accountNumber = account.getAccountNumber();
            balance = account.getBalance();
            bankName = account.getBankName();
            etDisplay = findViewById(R.id.etDisplay);
            etDisplay.setText("Account Number: " + accountNumber + "\nBalance: " + balance + "\nBank Name: " + bankName + "\n");
        } catch (NullPointerException npe) {
            Toast.makeText(getApplicationContext(), npe.getMessage(), Toast.LENGTH_LONG).show();
        } catch (IllegalArgumentException iae) {
            Toast.makeText(getApplicationContext(), iae.getMessage(), Toast.LENGTH_LONG).show();
        }

        btnActivity3 = findViewById(R.id.btnActivity3);
        btnActivity3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), Activity3.class);
                intent.putExtra("accountNumber", accountNumber);
                intent.putExtra("balance", balance);
                intent.putExtra("bankName", bankName);
                startActivity(intent);
            }
        });
    }
}

This is Activity3, this is the activity that I am trying to pass to: 这是Activity3,这是我要传递给的活动:

public class Activity3 extends AppCompatActivity {

    private Intent intent;
    private EditText etAmount;
    private TextView tvInfo;
    private Button withdraw, deposit;
    private double amount;

    private int accountNumber;
    private double balance;
    private String bankName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_3);

        etAmount = findViewById(R.id.etAmount);
        tvInfo = findViewById(R.id.etAccountInfo);
        amount = Double.parseDouble(etAmount.getText().toString());
        try {
            intent = getIntent();
            accountNumber = intent.getIntExtra("accountNumber", 100000);
            balance = intent.getDoubleExtra("balance", 1000);
            bankName = intent.getStringExtra("bankName");
            Toast.makeText(getApplicationContext(), accountNumber + "\n" + balance + "\n" + bankName, Toast.LENGTH_LONG).show();
        } catch (NullPointerException npe) {
            Toast.makeText(getApplicationContext(), npe.getMessage(), Toast.LENGTH_LONG).show();
        } catch (IllegalArgumentException iae) {
            Toast.makeText(getApplicationContext(), iae.getMessage(), Toast.LENGTH_LONG).show();
        }
//        tvInfo.setText("Account Number: " + accountNumber + "\nBalance: " + balance + "\nBank Name: " + bankName + "\n");

        withdraw = findViewById(R.id.btnWithdraw);
        withdraw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

        deposit = findViewById(R.id.btnDeposit);
        deposit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });
    }
}

MainActivity XML: MainActivity XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="412dp"
        android:layout_height="195dp"
        android:layout_marginStart="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/complimentary" />

    <Button
        android:id="@+id/btnActivity2"
        android:layout_width="378dp"
        android:layout_height="70dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="12dp"
        android:text="Second Activity"
        app:layout_constraintBottom_toTopOf="@+id/btnActivity3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.47"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/btnActivity3"
        android:layout_width="378dp"
        android:layout_height="70dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="Third Activity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.444"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/etDisplay"
        android:layout_width="378dp"
        android:layout_height="330dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:gravity="start|top"
        android:inputType="textMultiLine"
        app:layout_constraintBottom_toTopOf="@+id/btnActivity2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2" />

</android.support.constraint.ConstraintLayout>

Activity3 XML: Activity3 XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Activity3">

    <EditText
        android:id="@+id/etAmount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="48dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:hint="Amount $:"
        android:inputType="numberDecimal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etAccountInfo" />

    <Button
        android:id="@+id/btnDeposit"
        android:layout_width="210dp"
        android:layout_height="59dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="Deposit"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.508"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnWithdraw"
        app:layout_constraintVertical_bias="0.083" />

    <Button
        android:id="@+id/btnWithdraw"
        android:layout_width="210dp"
        android:layout_height="59dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="60dp"
        android:layout_marginEnd="8dp"
        android:text="Withdraw"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etAmount" />

    <EditText
        android:id="@+id/etAccountInfo"
        android:layout_width="258dp"
        android:layout_height="186dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="64dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:gravity="start|top"
        android:inputType="textMultiLine"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

When I press on the btnActivity3, the app crashes: sometimes showing app closes message and sometimes just not working at all. 当我按btnActivity3时,应用程序崩溃:有时显示应用程序关闭消息,有时甚至根本无法工作。 As I've said before, I didn't get any error messages, so I don't even know what is wrong with it. 正如我之前所说,我没有收到任何错误消息,所以我什至不知道它有什么问题。 Please Help! 请帮忙!

The problem is in following line: 问题在以下行中:

 amount = Double.parseDouble(etAmount.getText().toString());

You didn't set etAmount content in the XML, so it throws NumberFormatException when tries parse empty line. 您未在XML中设置etAmount内容,因此在尝试分析空行时会引发NumberFormatException

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM