Activity之间传递参数之值对象

Android中Intent中传递对象的方法有两种

1、实现Parcelable接口
2、实现Serializable接口

其中Serializable有完整的序列机制,而Parcelable需要我们手动完成相关功能函数的编写 ,implements Serializable接口的的作用就是给对象打了一个标记,系统会自动将其序列化。

1、Parcelable接口的实现:

MainActivity

package com.example.mac.sendargs;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

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


       findViewById(R.id.startAty).setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Intent i =new Intent(MainActivity.this,TheAty.class);
               i.putExtra("user",new User("luka",3,"female"));
               startActivity(i);
           }
       });
    }

}

User对象

package com.example.mac.sendargs;

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

import java.io.Serializable;

/**
 * Created by mac on 2017/4/1.
 */

public class User implements Parcelable{
    private String name;
    private int age;
    private String sex;

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public User(String name, int age, String sex){

        this.name=name;
        this.age=age;
        this.sex=sex;

    }

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(getName());
        parcel.writeInt(getAge());
        parcel.writeString(getSex());
    }


    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel parcel) {
            return new User(parcel.readString(),parcel.readInt(),parcel.readString());
        }

        @Override
        public User[] newArray(int i) {
            return new User[i];
        }
    };
}

SecondActivity

package com.example.mac.sendargs;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class TheAty extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_the_aty);
        tv=(TextView)findViewById(R.id.tv);//用TextView显示值
        Intent i =getIntent();
        i.getParcelableExtra("user");
        tv.setText(String.format("User info(name=%s,age=%d,sex=%s)",user.getName(),user.getAge(),user.getSex()));
    }
}

2、Serializable接口的实现:

User对象:

package com.example.mac.sendargs;

import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;

/**
 * Created by mac on 2017/4/1.
 */

public class User implements Serializable{
    private String name;
    private int age;
    private String sex;

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public User(String name, int age, String sex){

        this.name=name;
        this.age=age;
        this.sex=sex;


    }

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(getName());
        parcel.writeInt(getAge());
        parcel.writeString(getSex());
    }


    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel parcel) {
            return new User(parcel.readString(),parcel.readInt(),parcel.readString());
        }

        @Override
        public User[] newArray(int i) {
            return new User[i];
        }
    };
}

SecondActivity

package com.example.mac.sendargs;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class TheAty extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_the_aty);
        tv=(TextView)findViewById(R.id.tv);//用TextView显示值
        Intent i =getIntent();


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

        tv.setText(String.format("User info(name=%s,age=%d,sex=%s)",user.getName(),user.getAge(),user.getSex()));
    }
}

通过两种不同的接口实现acticity之间传递值对象的效果是一样的,程序运行效果如下:

图1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值