Android学习日记(yzy):intent传递的多种数据类型

android中intent的最基本三种使用方式:

 一:启动Activity,service或者Broadcast;

二:应用间的交互或者通讯;

三:多个Activity和service之间传递数据。


Intent可以传递的数据类型用多种。基本上分为五种;

 一:传递简单和基本的数据类型(包括int,char,string等类型的数据);

二:Bundle类型

三:Serializable对象(通过serializable接口传递序列化数据);

四:parcelable对象(通过parcelable接口传递包裹类型的数据);

五:intent类型;


注意向Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,parcelable的编程实现更加复杂,但具有更高的效率和性能,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable。


代码实现了intent一般的数据传递,bundle类型和parcelable对象的数据传递:

MainActivity.class

public class MainActivity extends Activity implements View.OnClickListener {
    private Button Btn_input;
    private Button Btn_bundle;
    private Button Btn_Parcelable;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Btn_input =(Button)findViewById(R.id.Btn_input);
        Btn_bundle = (Button)findViewById(R.id.Btn_bundle);
        Btn_Parcelable = (Button)findViewById(R.id.Btn_Parcelable);

        Btn_input.setOnClickListener(this);
        Btn_bundle.setOnClickListener(this);
        Btn_Parcelable.setOnClickListener(this);
    }
    public void onClick(View view){
        switch (view.getId()){
//            通过putextra来传递类似char,string,int等类型的简单数据。
//            case R.id.Btn_input:
//                Intent intent  = new Intent(MainActivity.this,SecondActivity.class);
//                intent.putExtra("key_str","传递简单基础的数据");
//                startActivity(intent);
//                break;

//            case R.id.Btn_bundle:
//                str = "通过bundle来传递封装的多个数据类型";
//                Bundle bundle = new Bundle();
//                bundle.putInt("key_bundle_int",1);
//                bundle .putString("key_bundle_str",str);
//                Intent intent_01 = new Intent(MainActivity.this,SecondActivity.class);
//                intent_01.putExtras(bundle);
//                startActivity(intent_01);
//                break;

            case R.id.Btn_Parcelable:
                Parcelable_Book book = new Parcelable_Book();
                book.setBookName("钢铁是怎么练成的");
                book.setAuthor("里古拉.奥斯特洛夫斯基");
                book.setPublishDate(1933);

                Intent intent_02 = new Intent(MainActivity.this,SecondActivity.class);
                Bundle bundle_01 = new Bundle();
                bundle_01.putParcelable("key_parcelable",book);
                intent_02.putExtras(bundle_01);
                startActivity(intent_02);
        }
    }
}
Parcelable代码为:

public class Parcelable_Book implements Parcelable
    {
        private String bookName;
        private String author;
        private int publishDate;

        public Parcelable_Book()
        {

        }

    public String getBookName()
    {
        return bookName;
    }

    public void setBookName(String bookName)
    {
        this.bookName = bookName;
    }

    public String getAuthor()
    {
        return author;
    }

    public void setAuthor(String author)
    {
        this.author = author;
    }

    public int getPublishDate()
    {
        return publishDate;
    }

    public void setPublishDate(int publishDate)
    {
        this.publishDate = publishDate;
    }

    @Override
    public int describeContents()
    {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags)
    {
        out.writeString(bookName);
        out.writeString(author);
        out.writeInt(publishDate);
    }

    public static final Parcelable.Creator<Parcelable_Book> CREATOR = new Creator<Parcelable_Book>()
    {
        @Override
        public Parcelable_Book[] newArray(int size)
        {
            return new Parcelable_Book[size];
        }

        @Override
        public Parcelable_Book createFromParcel(Parcel in)
        {
            return new Parcelable_Book(in);
        }
    };

    public Parcelable_Book(Parcel in)
    {
        bookName = in.readString();
        author = in.readString();
        publishDate = in.readInt();
    }
}
SecondActivity代码为:

public class SecondActivity extends Activity {
    private String str = new String();
    private TextView TV_str_in;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_second);
        TV_str_in = (TextView)findViewById(R.id.Tv_str_in);
//        Intent intent = getIntent();
//        通过getextra接受简单的数据类型
//        str = intent.getStringExtra("key_str");
//        TV_str_in.setText(str);
//        通过bundle传递数据
//        Intent intent_01 = getIntent();
//        Bundle bundle = intent.getExtras();
//        TV_str_in.setText("nember is :"+bundle.getInt("key_bundle_int")+"str is:"+bundle.getString("key_bundle_str"));
//        通过parcelable来传递数据
        Intent intent_02 = getIntent();
        Bundle bundle_01 = new Bundle();
        bundle_01 = intent_02.getExtras();
        Parcelable_Book book = bundle_01.getParcelable("key_parcelable");
        TV_str_in.setText("书名为:"+book.getBookName()+"\n作者名字是:"+book.getAuthor()+"\n出版时间是:"+book.getPublishDate());

    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值