Android中Intent传递Object和ArrayList<Object>对象---笔记

来源:互联网 发布:党章党规党纪网络答题 编辑:程序博客网 时间:2024/05/22 14:13

首先看一下Intent的官方的API。

传递一些基本类型数据的方法如下:

  • putExtra(String name, int value)
  • putExtra(String name, String value)
  • putExtra(String name, float value)
  • putExtra(String name, double value)
  • putExtra(String name, long value)
  • putExtra(String name, boolean value)
  • putExtra(String name, byte value)
  • putExtra(String name, char value)

传递基本类型ArrayList对象的方法如下:

  • putIntegerArrayListExtra(String name, ArrayList《Integer》 value)
  • putStringArrayListExtra(String name, ArrayList《Integer》 value)

但是我们并没有发现直接传递Object类型的方法,但是在开发中经常会需要传递一个Object类型或者ArrayList《Object》类型的数据,那么我们应该怎样实现呢?
方法如下:

传递Object类型:

  1. putExtra(String name, Serializable value)
  2. putExtra(String name, Parcelable value)

传递ArrayList《Object》类型:

  1. putExtra(String name, Serializable value)
  2. putExtra(String name, Parcelable value)
  3. putParcelableArrayListExtra(String name, ArrayList《? extends Parcelable》 value)


下面我们将student对象从Activity传递给Service。

Student类

package com.example.intenttest;public class Student implements Serializable{    private String name;    private String sex;    private int id;    public Student(String name, String sex, int id) {        super();        this.name = name;        this.sex = sex;        this.id = id;    }    @Override    public String toString() {        return "Student [name=" + name + ", sex=" + sex + ", id=" + id + "]";    }    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 int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }}

Activity类:

package com.example.intenttest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 创建Student对象        Student student = new Student("小灰灰", "男", 1);        // 通过Intent传递对象给Service        Intent intent = new Intent(MainActivity.this, MyService.class);        intent.setAction("action");        intent.putExtra("student", student);        startService(intent);    }}

Service类:

package com.example.intenttest;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class MyService extends Service{    @Override    public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        return null;    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        if("action".equals(intent.getAction())){            Student student = (Student) intent.getSerializableExtra("student");            Log.i("tag", "学生对象的toString():"+student);        }        return super.onStartCommand(intent, flags, startId);    }}

结果:
这里写图片描述



将ArrayList《Object》对象从MainActivity传递给SecondActivity:
MainActivity类:

package com.example.intenttest;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 这里必须为ArrayList,不能为List        ArrayList<Student> list = new ArrayList<Student>();        // 创建Student对象        Student student1 = new Student("小灰灰", "男", 1);        Student student2 = new Student("大灰狼", "男", 2);        Student student3 = new Student("红太狼", "女", 3);        list.add(student1);        list.add(student2);        list.add(student3);        // 通过Intent传递对象给Service        Intent intent = new Intent(MainActivity.this, SecondActivity.class);        intent.setAction("action");        intent.putExtra("studentlist", list);        startActivity(intent);    }}

(注意:MainActivity类中在声明list的时候必须用ArrayList而不能用List,否则就会出现如图所示的提示错误信息,
这里写图片描述

SecondActivity类:

package com.example.intenttest;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Intent intent = getIntent();        if ("action".equals(intent.getAction())) {            ArrayList<Student> list = (ArrayList<Student>) intent.getSerializableExtra("studentlist");            for(int i = 0;i<list.size();i++){            Log.i("tag", "student:" + list.get(i));            }        }    }}

运行结果:
这里写图片描述



以上是使用putExtra(String name, Serializable value)方法来进行Object和ArrayList《Object》的传递的代码。
通过 putExtra(String name, Parcelable value)和putParcelableArrayListExtra(String name, ArrayList《? extends Parcelable》 value)两个方法与putExtra(String name, Serializable value)的使用方法相同,只不过是序列化的方式不同。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cad运行不了插件怎么办 ai中缺少文字怎么办 电脑被格式化了怎么办 迷你世界地图下载失败怎么办 网页上广告太多怎么办 网页打开广告太多怎么办 PS界面图标小怎么办 百度地图反应慢怎么办 汽车导航不播报怎么办 wps菜单栏隐藏了怎么办 手机导航声音小怎么办 手机导航不好用怎么办 手机导航箭头不准怎么办 手机处于离线状态怎么办 穷人让人看不起怎么办 非洲人口过多怎么办啊 鼻子上长白头怎么办 高铁查到违禁品怎么办 青岛涂料备案证怎么办 淘宝集运不能寄怎么办 防静电指数过高怎么办 手机玻璃上裂痕怎么办 车辆环保检测不合格怎么办 眼镜被擦破镜片怎么办 手机边框有刮痕怎么办 手机金属壳磨损怎么办 手机后面凹下去怎么办 pu鞋子有刮痕怎么办 漆皮皮鞋有刮痕怎么办 手机有屏幕刮痕怎么办 鞋子刮花了怎么办 手机上屏幕划痕怎么办 篮球鞋磨小脚趾怎么办 小白鞋边上蹭黑怎么办 行李忘在高铁上怎么办 新加坡东西掉了怎么办 怕空调怕风吹怎么办 夏天不能吹空调怎么办 mac忘了用户名怎么办 物流托运货物损坏怎么办 拉勾网投递成功后怎么办