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


Activity之間通過Intent傳遞值,支持基本數據類型和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;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnSend = (Button)findViewById(R.id.send);
		btnSend.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public 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;
	
	@Override
	protected 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());  
	}

	@Override
	public 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)







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM