簡體   English   中英

使用Android中的可序列化將對象從第二個活動傳遞回主活動

[英]Passing an object from the 2nd activity back to main activity using serializable in android

下面的第一段代碼是我的主要活動,在其中創建了第二個活動的意圖。 在此活動中,我將在列表視圖中顯示費用,但由於未完全實現,因此我暫時將其忽略了。 我簡單想做的是啟動第二個活動,然后讓用戶輸入詳細信息,然后按一個按鈕以將該活動添加到列表視圖中。 @Override public boolean 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();
        }
        });

這是我的第二項活動,用戶在其中輸入數據。 當我嘗試傳遞費用對象時,仿真器指出應用已停止工作。 由於我不知道是什么原因引起的,請給我一些幫助。 這是我班的樣子。

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

}

如果沒有適當的日志詳細信息,就無法說出很多有關您的問題的信息。 但是您可以通過這些步驟。 Serializable方法的問題在於使用了反射,這是一個緩慢的過程。 這種方法會創建許多臨時對象,並導致大量垃圾回收。 因此,可能是由於此。 嘗試在真實設備上運行並查看其是否仍然存在。 另外,您可以將Parcelable實現到您的類,這比Serializable更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM