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)
分享到:
相关推荐
bundle传递基本数据,Parcelable类型数据,Serializable类型数据
Android通过Parcelable和Serializable实现各种类型嵌套序列化
Android序列化——Serializable与Parcelable
android-parcelable-intellij-plugin, 面向 Android Parcelable样板代码生成的IntelliJ插件 intellij/Android Studio 插件,用于 Android Parcelable代码生成这里工具基于类中的字段生成一个 Android Parcelable插件...
在Android studio 4.0+以后在插件中已经搜索不到Android Parcelable code generator这个超级好用的插件了,唯一能使用的方式就是下载离线插件包,进行离线安装。 File -> Settings -> Pugins -> Install plugin from...
在Android中用Parcelable序列化虽然效率高,但是比Serializable麻烦很多;现在只要添加一个Jar包就可以省去序列化的过程,很方便。 Jar包在项目里,可以直接使用,也可以查看里面的文本文件"README.md
在Android studio 4.0+以后在插件中已经搜索不到Android Parcelable code generator这个超级好用的插件了,唯一能使用的方式就是下载离线插件包,进行离线安装。
主要介绍了Android Parcelable与Serializable详解及区别的相关资料,需要的朋友可以参考下
android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144
android序列化(Parcelable)
AndroidStudio自动生成parcelable的插件
该工具根据类中的字段生成一个Android Parcelable实现。该工具是同名原始插件的新版本 用法:在编辑器中按ALT +插入(或用于代码生成的等效键绑定),然后选择Parcelable。它允许您选择要打包的字段。
Parcelable与Serializable Serializable是Java为我们提供的一个标准化的序列化接口。 Parcelable是Android为我们提供的序列化的接口。 对比: 1、Parcelable相对于Serializable的使用相对复杂一些。 2、Parcelable的...
android parcelable code generator
Android多进程通讯AIDL传递Parcelable对象
parcelable android demo,自己编写测试通过
在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直接传递,我们可以通过...
本篇文章主要介绍了Android序列化之Parcelable和Serializable的使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下