Android Activity跳轉傳遞序列化實體類物件
阿新 • • 發佈:2019-02-18
我發現自己真的好菜,想學點知識,可是不知道從何下手,今天一天狀態確實很不好。實在無聊,寫點以前遇到過的問題,方便以後用到時檢視,更希望能與別人分享。
本篇部落格實現Android activity跳轉的時候攜帶我自定義的實體類
Bundle給我們提供了一個putParcelable(key,value)的方法。專門用於傳遞序列化物件。同樣如果我們想傳遞一個list<實體類>,只要在bundle呼叫putParcelableArrayList(key, value)即可,當然list裡的物件要序例化!
話不多說,上程式碼:
可以看到自定義類實現了Parcelable介面, Parcelable需要實現writeToParcel、describeContents函式以及靜態的CREATOR變數,實際上就是將如何打包和解包的工作自己來定義(這裡我遇到過問題,就是變數寫入的數序一定要跟讀取的數序一樣,否則程式會崩潰,實際上Parcelable底層就是按順序轉成二進位制碼儲存,讀取的),而序列化的這些操作完全由底層實現,其中CREATOR用來建立自定義的Parcelable的物件.package com.weiwend.wj.testactivity; import android.os.Parcel; import android.os.Parcelable; public class UserBean implements Parcelable{ private String user_name; private int user_age; private int user_sex; private int user_addr; public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public int getUser_age() { return user_age; } public void setUser_age(int user_age) { this.user_age = user_age; } public int getUser_sex() { return user_sex; } public void setUser_sex(int user_sex) { this.user_sex = user_sex; } public int getUser_addr() { return user_addr; } public void setUser_addr(int user_addr) { this.user_addr = user_addr; } public static final Parcelable.Creator<UserBean> CREATOR=new Creator<UserBean>() { @Override public UserBean createFromParcel(Parcel source) { UserBean bean=new UserBean(); bean.user_name=source.readString(); bean.user_age=source.readInt(); bean.user_sex=source.readInt(); bean.user_addr=source.readInt(); return bean; } @Override public UserBean[] newArray(int size) { // TODO Auto-generated method stub return new UserBean[size]; } }; @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeString(user_name); dest.writeInt(user_age); dest.writeInt(user_sex); dest.writeInt(user_addr); } }</span><span style="font-size:12px;"> </span>
接下來就是如何使用了:
MainActivity中,就放了一個button
OtherActivity中,就放了一個textViewpublic class MainActivity extends Activity { private Context context; private Button button; private UserBean userBean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context=this; button=(Button) findViewById(R.id.btn); userBean=new UserBean(); userBean.setUser_name("影魔"); userBean.setUser_age(3); userBean.setUser_sex(1); userBean.setUser_addr("帝都"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(); Bundle bundle=new Bundle(); bundle.putParcelable("user", userBean); intent.setClass(context, OtherActivity1.class); intent.putExtra("bundle", bundle); context.startActivity(intent); } }); } }
public class OtherActivity1 extends Activity { private TextView tv; private UserBean userBean; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_other1); tv=(TextView) findViewById(R.id.tv); Bundle bundle=(Bundle) getIntent().getExtras().get("bundle"); userBean=(UserBean) bundle.getParcelable("user"); tv.setText("name:"+userBean.getUser_name()+",age:"+userBean.getUser_age()+ ",sex:"+userBean.getUser_sex()+",addr:"+userBean.getUser_addr()); } }
再看一下執行效果吧。(哈哈,突出一個醜)