[Android]Parcelable encountered IOException writing serializable object (name = xxx)

來源:互聯網
上載者:User

標籤:android   intent   

Activity之間通過Intent傳遞值,支援基礎資料型別 (Elementary Data Type)和String對象及它們的數組對象byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、String、String[],還有實現Serializable、Parcelable介面的類對象。

package com.example.test;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener{private Button btnSend;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnSend = (Button)findViewById(R.id.send);btnSend.setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v) {if(v.getId() == R.id.send){Intent intent = new Intent(this, HomeActivity.class);          Bundle bundle = new Bundle();          bundle.putString("Data", "hello.......");        User user = new User();        user.setAge(11);        user.setName("xiaosi");        bundle.putSerializable("User", user);        intent.putExtras(bundle);          startActivity(intent);  }}}

package com.example.test;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.widget.TextView;public class HomeActivity extends Activity {private TextView text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);Intent intent=getIntent();          Bundle bundle=intent.getExtras();          String str=bundle.getString("Data");          User user = (User) bundle.getSerializable("User");                text=(TextView)findViewById(R.id.text);          text.setText(str+"姓名:"+user.getName()+"年齡:"+user.getAge());  }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.home, menu);return true;}}


所以說activity之間傳遞自訂資料,只能實現implements Serializable或者Parcelable介面。 

可以用bundle putSerializable(String,Serizlizable)資料或者直接用intent putExtrr(String,Serizlizable)資料。 

我有一個需求需要傳遞多個自訂類型資料,於是我寫了一個對象把我需要的那些自訂資料封裝了起來,這個類實現了Serizlizable介面。但是在putExtra的時候出現了錯誤。 

後來我發現要想在Activity之間傳遞資料必須所有的內容都實現serializable介面才行,而我的對象中封裝的一個自訂類型資料沒有實現這個介面,所以出現了錯誤。 

之後我讓那個自訂類型實現了serializable介面就沒有問題了。

我自訂了一個TransmitData對象,實現了serializable介面。

package com.sjf.model;import java.io.Serializable;import java.util.Date;/** * 傳輸的對象,直接通過Socket傳輸的最大對象 * @author XIAOSI * */public class TransmitData implements Serializable{/** *  */private static final long serialVersionUID = 1L;//發送的訊息類型private TransmitType type;// 來自哪個使用者private String fromUser;// 發往哪個使用者private String toUser;// 傳輸的內容private User user;// 請求結果private boolean isSucess;// 請求說明,反饋說明private String description;// 請求或者反饋時間private Date time;public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}public boolean isSucess() {return isSucess;}public void setSucess(boolean isSucess) {this.isSucess = isSucess;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public TransmitType getType() {return type;}public void setType(TransmitType type) {this.type = type;}public String getFromUser() {return fromUser;}public void setFromUser(String fromUser) {this.fromUser = fromUser;}public String getToUser() {return toUser;}public void setToUser(String toUser) {this.toUser = toUser;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

然而TransmitData對象中自訂資料類型User並沒有實現序列化介面。

就報錯出:Parcelable encountered IOException writing serializable object (name = xxx)






[Android]Parcelable encountered IOException writing serializable object (name = xxx)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.