aty 的2个页面数据传递 值对象和序列化

本文详细介绍了Java中通过Intent、Bundle、Serializable和Parcelable进行对象传递与序列化的方法,包括参数传递、对象序列化及反序列化过程,并通过实例展示了如何在不同Activity间共享数据。

第一个有btn Main类

package com.lyz.news.jkxy;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button mbtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mbtn= (Button) findViewById(R.id.btn_skip);
        mbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i=new Intent(MainActivity.this,M2Activity.class);
                //putExtra 的传递方式
//                i.putExtra("data","woyaoshangheima");
//                Bundle的传递方法
                    Bundle bundle=new Bundle();
                bundle.putString("name","晴");
                bundle.putInt("age",18);
                //two界面使用了默认的,我这么指定这个key是存在的了,会覆盖他;
                bundle.putString("name1","lyzaaa");
                //传递一个bundle对象进来
                i.putExtra("mdata",bundle);
                i.putExtras(bundle);

                startActivity(i);

            }
        });


    }



}
传递的第二个类:

package com.lyz.news.jkxy;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class M2Activity extends Activity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_m2);
        tv= (TextView) findViewById(R.id.tv);
        Intent i2 = getIntent();
        //putExtra的方式
//        tv.setText(i2.getStringExtra("data"));
            //bundle的传递方式
//        Bundle i2Extras = i2.getExtras();
        //g("name");这里先头我添成data了第一个aty传key是name,我错了之后给的就是Null
//        String name = i2Extras.getString("name");
//        int age = i2Extras.getInt("age");
//        tv.setText(String.format("name=%s,age%d,name1=%s",name,age,i2Extras.getString("name1","leo")));
//            putExtra bundle的方式
        Bundle mdata = i2.getBundleExtra("mdata");

            //这里我getInt手滑成String没有显示Null数据了
        tv.setText(String.format("name=%s,age%d,name1=%s",mdata.getString("name"),mdata.getInt("age"),mdata.getString("name1")));
    }


}
xml文件省略:第一个页面是button第二页面是TextView

现在来介绍值传递对象:

第一个页面:

package com.lyz.news.jkxy;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import bean.Bean;

public class AtyskipBean extends Activity {

    private Button mbtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_atyskip_bean);
        mbtn= (Button) findViewById(R.id.btn_bean);

        mbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

              Intent intent=new Intent(AtyskipBean.this,AtySecond.class);

                //Serializable是java序列化对象的一个接口
//                Parcelable 是android提供的序列化对象的接口
//                值传递对象
                        intent.putExtra("Bean",new Bean(18,"晴"));
                //忘记启动aty了
                startActivity(intent);
            }
        });
    }

}

java Bean类:

package bean;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by Administrator on 2015/9/23.
 */
//public class Bean implements Serializable{
public class Bean implements Parcelable {

    private String name;
    private int age;

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

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

    /**
     * 系统会自动序列化执行这个方法
     * 我们在这个方法写入了这两条数据
     * 把数据给保存起来然后就可以传递数据了
     * 比如写入数据库
     *
     * @param dest
     * @param flags
     * @Creator 创造者 创造物
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        //这里没有使用getName 数据也一样好使;
        dest.writeInt(age);
        dest.writeString(name);
//            这里的写入顺序不能变,必须和构造方法一模一样;
//             dest.writeInt(getAge());
//            dest.writeString(getName());

    }

    public static final Creator<Bean> CREATOR = new Creator<Bean>() {
        @Override//Parcel 来创建一个对象
        public Bean createFromParcel(Parcel source) {
            //这个是 new Bean( int ,string)构造方法
            return new Bean(source.readInt(),source.readString());
        }

        @Override
        public Bean[] newArray(int size) {
            return new Bean[size];
        }
    };
}


跳到的第二界面:

package com.lyz.news.jkxy;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import bean.Bean;

public class AtySecond extends Activity {

    private TextView mtv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_aty_second);

        mtv=    (TextView) findViewById(R.id.tv_second);
        Intent i = getIntent();
        //通过SerializableExtra
//       Bean bean= (Bean) i.getSerializableExtra("Bean");
        //两种方法 获取一下返回值,或是直接点方法
//        Bean bean = (Bean) getIntent().getSerializableExtra("Bean");

        //通过ParcelableExtra
        Bean bean=i.getParcelableExtra("Bean");
        mtv.setText(String.format("user info(name=%s,age=%d)",bean.getName(),bean.getAge()));
    }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值