gpt4 book ai didi

java - 从 Intent 中获取额外(变量)

转载 作者:行者123 更新时间:2023-12-01 18:00:24 25 4
gpt4 key购买 nike

我想从我的 java (android) 项目主 Activity 中的另一个获取三个变量。因此,我将它们放入一个 bundle 中,并将其放入 Intent 中。这些变量来 self 在第三个类中创建的 Object,如下所示:

public class Transaction {
private float value;
private int transaction_Date;
private String description;

public Transaction(float value, int transaction_Date, String description){
super();
this.value = value;
this.transaction_Date = transaction_Date;
this.description = description;
}

public float getValue(){
return value;
}
public int getTransaction_Date(){
return transaction_Date;
}
public String getDescription(){
return description;
}


public void setValue(float value) {
this.value = value;
}

public void setTransaction_Date(int transaction_Date) {
this.transaction_Date = transaction_Date;
}

public void setDescription(String description) {
this.description = description;
}

这是我将数据获取到上述Intent中的尝试:

public class AddMoneyTransaction extends AppCompatActivity implements View.OnClickListener {

Button addDepositButton;
EditText depositInput, depositInputDate, depositInputNote;

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

//setup the Button and EditText

addDepositButton = (Button)findViewById(R.id.addDepositButton);
depositInput = (EditText) findViewById(R.id.depositInput);
depositInputDate = (EditText) findViewById(R.id.depositInputDate);
depositInputNote = (EditText) findViewById(R.id.depositInputNote);

//get the onClickListener

addDepositButton.setOnClickListener(this);

}

@Override
public void onClick(View view) {
Intent depositIntent = new Intent(AddMoneyTransaction.this, AssetsOverview.class);
Transaction deposit = new Transaction(100, 16, "random comment");
deposit.setValue(Float.parseFloat(depositInput.getText().toString()));
deposit.setTransaction_Date(Integer.parseInt(depositInputDate.getText().toString()));
deposit.setDescription(depositInputNote.getText().toString());

Bundle depositBundle = new Bundle();
depositBundle.putFloat("value", Float.parseFloat(depositInput.getText().toString()));
depositBundle.putInt("date", Integer.parseInt(depositInputDate.getText().toString()));
depositBundle.putString("description", depositInputNote.getText().toString());

depositIntent.putExtras(depositBundle);
startActivity(depositIntent);
}

这(当然)不起作用:

//populated transaction list

protected void populateTransactionList() {

Intent depositIntent = getIntent();
Transaction deposit = (Transaction) getIntent().getExtras();
}

那么我怎样才能从我的Intent中获取三个变量呢?

最佳答案

通过 Intent 传递自定义对象的方法是实现类似于下面给出的 Transaction 类的 Parcelable 接口(interface)。

使 Transaction 类可分割,如下面给出的代码 fragment

import android.os.Parcel;
import android.os.Parcelable;

public class `Transaction` implements Parcelable {
private float value;
private int transaction_Date;
private String description;

public Transaction(float value, int transaction_Date, String description) {
super();
this.value = value;
this.transaction_Date = transaction_Date;
this.description = description;
}

public float getValue() {
return value;
}

public int getTransaction_Date() {
return transaction_Date;
}

public String getDescription() {
return description;
}


public void setValue(float value) {
this.value = value;
}

public void setTransaction_Date(int transaction_Date) {
this.transaction_Date = transaction_Date;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeFloat(this.value);
dest.writeInt(this.transaction_Date);
dest.writeString(this.description);
}

protected Transaction(Parcel in) {
this.value = in.readFloat();
this.transaction_Date = in.readInt();
this.description = in.readString();
}

public static final Parcelable.Creator<Transaction> CREATOR = new Parcelable.Creator<Transaction>() {
@Override
public Transaction createFromParcel(Parcel source) {
return new Transaction(source);
}

@Override
public Transaction[] newArray(int size) {
return new Transaction[size];
}
};
}

将 Parcelable 对象放入 Intent 中,如下所示

        public class AddMoneyTransaction extends AppCompatActivity implements View.OnClickListener {

Button addDepositButton;
EditText depositInput, depositInputDate, depositInputNote;

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

//setup the Button and EditText

addDepositButton = (Button)findViewById(R.id.addDepositButton);
depositInput = (EditText) findViewById(R.id.depositInput);
depositInputDate = (EditText) findViewById(R.id.depositInputDate);
depositInputNote = (EditText) findViewById(R.id.depositInputNote);

//get the onClickListener
addDepositButton.setOnClickListener(this);

}

@Override
public void onClick(View view) {
Intent depositIntent = new Intent(AddMoneyTransaction.this, AssetsOverview.class);
Transaction deposit = new Transaction(100, 16, "random comment");
deposit.setValue(Float.parseFloat(depositInput.getText().toString()));
deposit.setTransaction_Date(
Integer.parseInt(depositInputDate.getText().toString()));
deposit.setDescription(depositInputNote.getText().toString());
depositIntent.putExtra("data",deposit);
startActivity(depositIntent);
}

并接收下面给出的 Intent

//populated transaction list

protected void populateTransactionList() {

Intent depositIntent = getIntent();
Transaction deposit = depositIntent.getParcelableExtra("data");
}

关于java - 从 Intent 中获取额外(变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com