当前位置: 首页 > 知识库问答 >
问题:

在android中使用serializable将对象从第二个活动传递回主活动

轩辕炎彬
2023-03-14

下面的第一个代码块是我的主要活动,我在其中创建了第二个活动的意图。在这个活动中,我将在列表视图中显示费用,因为它还没有完全实现,所以我暂时忽略了它。我想做的就是启动第二个活动,让用户输入详细信息,然后按下一个按钮将活动添加到列表视图中。@override公共布尔onOptionsItemSelected(MenuItem item){int id=item.getItemId();

        if (id == R.id.addExpense) {
            Intent intent = new Intent(this, ExpenseActivity.class);
            startActivityForResult(intent, 1);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // check that it is the SecondActivity with an OK result
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            Expense expense = (Expense) data.getSerializableExtra("sampleObject");
            Expenses.add(expense);
        }
    }
}


 final Button btnAddExpense = (Button) findViewById(R.id.btnAddExpense);
    btnAddExpense.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           String amountV = txtAmountVat.getText().toString();
           int amountVTwo = Integer.parseInt(amountV);
           String amountI = txtAmount.getText().toString();
           int amountITwo = Integer.parseInt(amountI);

            Expense expense = new Expense(amountITwo, amountVTwo, txtDateOfExpense.getText().toString(), txtDateAdded.getText().toString(), datePaid, paid, txtDes.getText().toString(), imageUri );

            Intent intent = new Intent();
            intent.putExtra("Expense", expense);
            setResult(MainActivity.RESULT_OK, intent);
            finish();
        }
        });

这是用户输入数据的第二个活动。当我尝试传回expense对象时,模拟器会声明应用程序已经停止工作。我不知道是什么引起了这个问题,请帮我一下。这就是我上课的样子。

public class Expense implements Serializable {

private int _amount, _amountVat;
private String _dateOfExpense, _dateAdded, _datePaid, _expenseDescription;
private Boolean _paid;
private Uri _imageUri;

public Expense(int amount, int amountVat, String dateOfExpense, String dateAdded, String datePaid, Boolean paid, String expenseDescription, Uri imageUri){

    _amount = amount;
    _amountVat = amountVat;
    _dateOfExpense = dateOfExpense;
    _dateAdded = dateAdded;
    _datePaid = datePaid;
    _paid = paid;
    _expenseDescription = expenseDescription;
    _imageUri = imageUri;
}

public int get_amount() {
    return _amount;
}

public void set_amount(int _amount) {
    this._amount = _amount;
}

public int get_amountVat() {
    return _amountVat;
}

public void set_amountVat(int _amountVat) {
    this._amountVat = _amountVat;
}

public String get_dateOfExpense() {
    return _dateOfExpense;
}

public void set_dateOfExpense(String _dateOfExpense) {
    this._dateOfExpense = _dateOfExpense;
}

public String get_dateAdded() {
    return _dateAdded;
}

public void set_dateAdded(String _dateAdded) {
    this._dateAdded = _dateAdded;
}

public String get_datePaid() {
    return _datePaid;
}

public void set_datePaid(String _datePaid) {
    this._datePaid = _datePaid;
}

public Boolean get_paid() {
    return _paid;
}

public void set_paid(Boolean _paid) {
    this._paid = _paid;
}

public Uri get_imageUri() {
    return _imageUri;
}

public void set_imageUri(Uri _imageUri) {
    this._imageUri = _imageUri;
}

public String get_expenseDescription() {return _expenseDescription;}

public void set_expenseDescription(String _expenseDescription) {this._expenseDescription = _expenseDescription;}

}

共有1个答案

隆芷阳
2023-03-14

如果没有适当的日志细节,你的问题就不能说太多。但你可以通过这些点。串行化方法的问题是使用了反射,并且这是一个缓慢的过程。此方法创建了大量临时对象并导致了相当多的垃圾回收。所以,可能是因为这个。试着在一个真实的设备上运行&看看它是否持续存在。或者,您可以将Parcelable实现到您的类,这比Serializable更快。

 类似资料:
  • 问题内容: 我目前正在尝试获取通过REST API调用获取的数据,将其解析为所需的信息,然后将该信息传递给新活动。我使用的是异步HTTP客户端从loopj.com为REST客户端,然后使用我下面的代码,并为当前和未来的活动,分别。 Eclipse不会为我的任何代码传递任何错误,但是当我尝试在模拟器中运行时,当新的活动/视图打开时,我什么也没得到(即白屏)。我尝试在REST CLIENT中使用其他U

  • 我想问一下如何将值从片段a传递到活动B,然后再传递回片段。我尝试使用bundle来传递值,但是它会给出错误的数据。 非常感谢。

  • 我正在开发一个由多个活动组成的Android应用程序,我必须在它们之间传递ab对象,但我不能通过使用意图传递它,因为对象的类没有实现可序列化,我怎么做?我无法修改我的类的源代码。谢谢:)

  • 我在一个活动中有一个列表视图,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个活动将打开,当用户点击更新按钮时,在下一个活动中标记出勤率后,第二个活动应该完成,第一个活动列表视图应该更新。 我成功地做了什么:我已经成功地标记了出席情况并更改了listview的颜色,但我在关闭第二个活动并重新启动第一个活动后这样做了。通过这种方式,由于再次开始活动,listview会得到更新。 我无法

  • 我尝试使用 如有任何帮助,不胜感激,谢谢。