[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)

时间: 2024-08-28 13:08:39

[Android]Parcelable encountered IOException writing serializable object (name = xxx)的相关文章

兔子--Android java.lang.RuntimeException:Parcelable encountered IOException writing serializable objec

Activity之间传递数据时,为了方便,将很多数据封装成对象,然后将整个对象传过去.传对象有2中情况, 一种是实现Parcelable接口的 一种是实现Serializable接口的 用bundle.putSerializable(key ,object)产地参数或者用intent.putExtra(key object)传递参数. 但是使用时候,出现了异常 1.java.io.NotSerializableException异常 原因:对象没有实现Serializable接口 解决办法:让对

Android Parcelable

Android Parcelable 后面再补充 http://www.cnblogs.com/huanyou/p/5594475.html

Android java.io.IOException异常情况整理

前言 目前android上的绝大多数项目还是由JAVA开发的,而java最常见的异常之一就是java.io.IOException,这个异常我们在android开发中也会经常遇到,这里整理了一些在Android开展法中常见的IOException情况,但在实际中,造成IOException异常的原因可能多种多样,这里我只整理了几种,欢迎大家留言讨论. open failed: EACCES (Permission denied) 根据报错信息可知是因为权限错误导致,解决办法有以下几种: 1.在A

Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference xxx 的问题分析与解决方案

最近,公司要求开发一个APP,所以很苦逼的学习了几天 Android 的上手手册,但是实际运用于开发中还是捉襟见肘,困难重重:好在的是,部门还有几个专门搞安卓的大佬可以问问,哈哈 好了,进入今天的正题吧,前天开发过程中,遇到一个如“标题”所示的问题,百思不得其解!最终上网搜报错的原因,才找到问题的所在:.xml文件中运用到了不存在的标签--我的是因为粗心把<View>写成了<view>,加载的时候找不到该标签,所以页面一直运行不出来. 所以,该问题基本出在于布局页面有错(有的错误页

Android Studio 1.X.X - Failed to find XXX:

当在github上看到一个很好的开源库,想集成时,开源库的readme都说让在工程下的build.gradle中的 dependencies 添加类似语句 compile 'com.XXX:XXX:1.0.0' 然后同步,发现报错了 Android Studio 1.X.X - Failed to find XXX: 这是因为你的Android Studio在离线模式,Setting中补选中 Gradle -> Offline work 然后再Sync一下,就发现这个库已经添加到我们的Libra

Android Universal Image Loader java.io.FileNotFoundException: http:/xxx/lxx/xxxx.jpg

前段时间在使用ImageLoader异步加载服务端返回的图片时总是出现 java.io.FileNotFoundException: http://xxxx/l046/10046137034b1c0db0.jpg at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) at com.nostra13.universalimageloader.core.download.URL

Android Parcelable和Serializable的区别

本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的.而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存

[转]Android Parcelable和Serializable的区别

本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的.而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存

Android Parcelable和Serializable的区别,androidparcelable

本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存对象的属性到本地文件.数据库.网络流.rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个 程序间的.而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程 序间(AIDL)高效的传输数据而设计,这些数据仅在内存