您的位置:首页 > 移动开发 > Android开发

Android中Intent传递对象

2015-10-22 00:00 459 查看
摘要: Android中Intent传递对象的两种方法(Serializable,Parcelable)

直接代码不罗嗦

传递数据

public class MainActivity extends Activity {

private EditText username, password;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (EditText) this.findViewById(R.id.username);
password = (EditText) this.findViewById(R.id.password);

}

//ooclick 方法
public void login(View view) {
Intent intent = new Intent(this, Main2Activity.class);
String name = username.getText().toString();
String pass = password.getText().toString();
// intent.putExtra("username", name);
// intent.putExtra("password", pass);

// Bundle 数据传递
Bundle bundle = new Bundle();// 其实是对hashmap的封装
bundle.putString("username", name);
bundle.putString("password", pass);
intent.putExtras(bundle);

// 实现Parcel接口传递 对象
Person person = new Person(100, "张三", 26);
intent.putExtra("Person", person);

// 序列化传递对象

User user = new User(101, "小杨同学", 25);

intent.putExtra("User", user);

startActivity(intent);

}
}

接收数据

public class Main2Activity extends Activity {
private TextView message;

@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity2_main);
super.onCreate(savedInstanceState);
message = (TextView) this.findViewById(R.id.message);
String username = "";
String password = "";
Intent intent = getIntent();
// String username = intent.getStringExtra("username");
// String password = intent.getStringExtra("password");

// 获取Bundle 数据
Bundle bundle = intent.getExtras();
username = bundle.getString("username");
password = bundle.getString("password");

Person person=intent.getParcelableExtra("Person");

User user=(User) intent.getSerializableExtra("User");

message.setText(
"用户名:" + username + "==密码:" + password
+ "\n Person对象" +person.toString()
+"\n User 对象" +user.toString());

}
}


1、实现Parcelable接口

public class Person implements Parcelable {
private int id;
private String name;
private int age;

@Override
public int describeContents() {

return 0;
}

/**
* 把数据写入到Parcel对象
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeInt(age);

}

public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
// 从Parcel对象里读取数据
public Person createFromParcel(Parcel in) {
return new Person(in);
}

public Person[] newArray(int size) {
return new Person[size];
}
};

/**
* 读取的数据类型要和写入的数据类型相对应
*
* @param in
*/
private Person(Parcel in) {
id = in.readInt();
name = in.readString();
age = in.readInt();
}

public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}

public Person(){}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

2、实现Serializable接口

public class User implements Serializable {

private static final long serialVersionUID = 5232357154831253356L;
private int id;
private String name;
private int age;

public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: