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)
