精华内容
下载资源
问答
  • 对象之间的消息传递
    千次阅读
    2020-04-03 20:46:46

    一、简介

    开发过程中,Activity之间传递数据是必不可少的,Android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供了相关的put、set方法,而作为自定义的类型则需要有特别的要求。

    自定义类型,想要使用Bundle传递时,需要满足特定的条件,即该类型需要实现Serializable接口或Parcelable接口。

    注:如果目标对象中包含其他对象,则被包含的对象也需要实现Serializable接口或Parcelable接口。

    二、代码实现

    我们以Serializable接口为例:

    1、传递对象

    1)自定义对象,实现Serializable接口

    package com.davis.drawtrangle;
    
    import java.io.Serializable;
    
    public class Person implements Serializable{
        
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    2)使用Intent传递对象

    	private void clearDrawView(){
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            Person person = new Person("admin", 1);
            Bundle bundle = new Bundle();
            bundle.putSerializable("person", person);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    

    3)获取传递的数据

    	private void init(){
            Person person = (Person)getIntent().getSerializableExtra("person");
            Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());
        }
    

    2、传递对象集合

    1)同上。

    2)同上。

    注:使用putSerializable()方法时,需要把List<>强转成为Serializable,并且集合中的成员都需要实现Serializable接口。

    	private void clearDrawView(){
            Intent intent = new Intent(MainActivity.this, MainActivity.class);
            List<Person> lists = new ArrayList<Person>();
            Person person = new Person("admin", 1);
            lists.add(person);
            Bundle bundle = new Bundle();
            bundle.putSerializable("person", (Serializable) lists);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    

    3)同上。

    注:不足之处在于,由于获取数据时候,需要把Serializable强转成为对应的List<>,此处会有警告。

    	private void init(){
            List<Person> lists = (List<Person>)getIntent().getSerializableExtra("person");
            for(int i=0;i<lists.size();i++) {
                Person person = lists.get(i);
                Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());
            }
        }
    

    三、注意

    使用以上方法传递对象时,都是创建了新的实例,而非传递对象的引用,如果是传递引用,也就无需序列化了。

    更多相关内容
  • 对象的引用传递和值传递

    千次阅读 2018-07-04 15:42:00
    我们在开发的过程中,经常会遇见对象的值传递,和对象的引用传递,老是分不清楚。 今天以下面两个例子,结合内存分析,来讲解值传递和引用传递

    我们在开发的过程中,经常会遇见对象的值传递,和对象的引用传递,老是分不清楚。

    今天以下面两个例子,结合内存分析,来讲解值传递和引用传递。

    值传递

    源代码

    
    /**
     * Created By zby on 20:46 2022/7/27
     * 学生类
     */
    public class Student{
    
        private String name;
        
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void changeStudentName(Student s) {
            s = new Student();
            s.setName("nihao");
        }
    
        public static void main(String[] args) {
       1     Student student = new Student();
       2     student.setName("珠宝呀");
            
       3    *System.out.println(student.getName());*
            
       4     student.changeStudentName(student);
    
       5    *System.out.println(student.getName());*
    	}
    }
    output:
    		珠宝呀
    		珠宝呀
    

    输出结果:

    在这里插入图片描述

    你会发现,即便我调用了changeStudentName方法,其输出结果也是一样的,为什么会这样呢?

    语句1

    我们来画一个类加载的JVM结构图,当我们执行语句1时,首先会在栈里分配一个地址空间存储指向student对象1的引用的首地址:

    这里写图片描述

    语句2

    当我们执行语句2的时候,在栈里面分配一个临时变量name,临时变量存储是常量池当中的“珠宝”的地址,而通过set方法中的this.name=name,此时对象的属性存储的临时变量的副本地址,通过这个方法可得:

    String p="珠宝呀";
    student.setName(p);
    student.setName("珠宝");
    System.out.println("student-->"+student.getName());
    System.out.println("p-->"+p);
    
    output:
    	student-->珠宝
    	p-->珠宝呀
    

    发现p的值并不没改变,而对象name重新获取新的副本。这个是按值传递。

    这里写图片描述

    语句4

    当方法执行语句4时:此时获取了student对象的副本,副本指向了新的Student对象,并且set了新的名字,而Student初值并没有改变,因而,输出的结果是没有改变。

    引用传递

    如果将StudentName的返回对象改变了,就会出现不同的结果:

     public Student changeStudentName(Student s) {
            s = new Student();
            s.setName("nihao");
    
           return s;
        }
    
        public static void main(String[] args) {
    
            Student student = new Student();
            System.out.println(student.getName());
    
            String p="珠宝呀";
            student.setName(p);
            student.setName("珠宝");
            System.out.println("student-->"+student.getName());
            System.out.println("p-->"+p);
    
            student = student.changeStudentName(student);
    
            System.out.println("student-->"+student.getName());
        }
    
    	output:
    		student-->珠宝
    		p-->珠宝呀
    		student-->nihao
    

    输出结果:

    在这里插入图片描述

    因为,通过调用 student.changeStudentName(student);这个方法,返回的是一个新的对象的引用,而student重新指向了新的引用对象,故而,值就被改变了。这个是按引用传递数据。

    总结

    通过以上两段代码的分析,应该对值传递和引用传递,有个大致的了解了。

    展开全文
  • 在Activity之间传递对象

    千次阅读 2015-10-10 13:08:13
    今天来讲向一个Activity中传递对象在这里声明,如果一个对象要被传递,那么该对象必须通过Serializable接口或者Parcelable接口来实现对象的序列化。Serializable为JAVA提供的对象序列化接口:效率低 Parcelable为...

    今天来讲向一个Activity中传递对象

    在这里声明,如果一个对象要被传递,那么该对象必须通过Serializable接口或者Parcelable接口来实现对象的序列化。

    Serializable为JAVA提供的对象序列化接口:效率低
    Parcelable为Android提供的对象序列化接口:移动平台专用,效率高

    下面,我们就针对Parcelable接口来实现对象的传递。

    首先,我们来看MainActivity,这是发送对象的活动。

    创建意图
    Intent i = new Intent(MainActivity.this,TheAty.class);
    TheAty是接收对象的活动。

    通过putExtra来传递对象
    i.putExtra(“user”,(Parcelable)new User(“袁雾头”,2));

    在这里,我们要建立一个User类,并实现Parcelable接口
    public class User implements Parcelable

    其构造方法为
    这里写图片描述

    通过Parcelable来实现对象序列化接口,需要实现下面两个方法
    这里写图片描述
    这里写图片描述

    我要在这里解释一下:

    如果某个类实现了这个接口,那么它的对象实例可以写入到Parcel中,并且能够从中恢复,并且这个类必须要有一个static的field,并且名称要为CREATOR,这个field是某个实现了Parcelable.Creator接口的类的对象实例。

    createFromParcel函数创建实现Parcelable接口的某个类的一个新的对象实例,并且用从给定的Parcel中获取的数据进行实例化,Parcel中的数据是在之前通过Parcelable.writeToParcel方式写入的数据。

    newArray函数创建实现Parcelable接口的某个类的一个新的对象数组,数组中的每个项都被初始化为null。

    到这来,我们完成了User类中的相关操作。

    现在,我们来到TheAty,对象的接收方
    在接受方只要实现下面两行代码就完成了接收
    Intent i = getIntent();
    User user = (User) i.getParcelableExtra(“user”);

    到此,在Activity之间传递对象我们就讲完了。

    展开全文
  • vue 方法间传递数据对象参数

    千次阅读 2020-12-17 10:29:12
    功能:将data对象作为参数传递给方法,在方法中对不同的参数进行相应操作。 如下,实现简单实现根据传入的不同p标签key对象,在相应p标签中显示相应内容: <template> <div> <!-- 可以通过如下两种...
    功能:将data对象作为参数传递给方法,在方法中对不同的参数进行相应操作。

    如下,实现简单实现根据传入的不同p标签key对象,在相应p标签中显示相应内容:

    <template>
      <div>
        <!-- 可以通过如下两种方式绑定标签内容 -->
        <p>{{map.p1Content}}</p>
        <p>{{map.p2Content}}</p>
        <p>{{map.p3Content}}</p>
        <p v-html="map.p4Content"></p>
      </div>
    </template>
    
    <script>
    export default {
      name: 'TransferParam',
      data () {
        return {
          map: {
            p1Content: '',
            p2Content: '',
            p3Content: '',
            p4Content: '',
          },
        }
      },
      methods: {
        //   给对象赋值
        setPValue (contentKey, content) {
          this.map[contentKey] = content
        },
      },
      created () {
        //   调用方法
        this.setPValue('p1Content', "第一个p标签内容。")
        this.setPValue('p2Content', "第二个p标签内容。")
        this.setPValue('p3Content', "第三个p标签内容。")
        this.setPValue('p4Content', "第四个p标签内容。")
      }
    }
    </script>
    

    效果图:
    在这里插入图片描述
    代码:https://gitee.com/crazywsp/JavaImprove/blob/master/VueRepo/yarndemo03/src/components/TransferParam.vue

    展开全文
  • 父组件传递给子组件 父组件代码代码: // 父组件import引入子组件(子组件路径要对) import addressToast from '@/components/addressToast' // 在component中加载组件 components: { addressToast }, ...
  • Android Activity之间实现数据传递是一项非常重要的技术,今天我就来讲一讲如何实现数据传递:     1.基本数据传递 MainActivity.java   Intent intent=new Intent(this,ThinkActivity.class);//...
  • Android 消息通信之Activity间消息传递

    千次阅读 2018-03-02 12:21:40
    消息传递的作用不必多说,主要是在不同的组件之间传播消息或者共享某些状态等,以下是几种常用的消息传递机制: Intent 静态变量 全局变量 及Application Android系统剪切板 本地化存储方式 Andorid组件 EventBus ...
  • 认识Java程序之对象消息传递

    千次阅读 2011-12-09 12:19:58
    对象有类中定义的月性和方法,对象之间通过 传递消息来进行相互的联系.发送消.息的对象要指明接收消息的对象,同时要在消息中说 明接收消息的刘象所要完成的动作。当一个对象发进一个消息后.另一个对象接收到该消 ...
  • java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型 值传递;引用类型,地址值传递,所以叫值传递。  当主函数的变量,对象(主本)传递到副函数时,传递的...
  • 在MFC中实现对象之间数据的传递

    千次阅读 2015-01-22 16:00:07
    通过以上步骤,可以把App类里面的ii的数据 传递到 View类里面的iii变量。 结果如下。 ×××××××××××××××××××××××××××××××××××××××××××××...
  • 对象消息传递和方法

    千次阅读 2009-05-01 17:59:00
    尽管对象的表示在形式上与一般数据类型十分相似,但是它们之间存在一种本质区别:对象之间通过消息传递方式进行通信。 消息传递原是一种与通信有关的概念,OOP使得对象具有交互能力的主要模型就是消息传递模型。...
  • activity和activity之间传递对象,fragment和fragment之间传递对象的方法,当然从activity向fragment传递对象同样可以用。由于activity是不能new出来一个对象去调用 方法的,所以。我们就需要借助于handler来传递。...
  • 大家都对Bundle比较熟悉了,在多个activity之间通信之间它功不可没,下面我给大家梳理利用Bundle之间传递对象的方法 首先是两个Activity,第一个是发送的Activity Intent mIntent =new Intent(getActivity(),...
  • 尽管对象的表示在形式上与一般数据类型十分相似,但是它们之间存在一种本质区别:对象之间通过消息传递方式进行通信。 消息传递原是一种与通信有关的概念,OOP使得对象具有交互能力的主要模型就是消息传递模型。对象...
  • Android线程间的消息传递

    千次阅读 2018-12-03 15:25:35
    一、UI线程往其他Theard传递消息 1、UI端传递方式: A、首先让handler ontain一个message B、然后sendToTarget 2、其他Thread接受UI线程传递内容: A、实现run方法 B、Looper初始化:Looper.prepare C、Handler...
  • vue3组件之间数据传递

    千次阅读 2022-03-14 21:15:57
    遵循vue的单向数据流,就是父组件能往子组件传递数据,但是子组件不能回传,父组件传递子组件数据的方式 就是在组件标签上使用属性绑定的方式进行传递,子组件中定义props对象,定义需要接受的数据,在setup中的...
  • 对象作为参数传递给方法

    千次阅读 2018-12-06 16:55:06
    要求: (1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。 (2)定义一个类PassObject,在...在printAreas方法中打印输出1到time之间的每个整数半径值,以及对...
  • Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的...
  • // 被传递对象 window.open("xxx.html","_blank");  在被打开的页面里面,通过 window.opener 获的打开页面对象的引用: var parent = window.opener;// 获取打开页面的引用 var obj = parent.passObj;//...
  • 通过异步Task网络下载图片,实现图片保存为内部对象在多个Activity之间共享使用,以及Java对象串行化之后在Activity之间传递的使用演示。
  • 1. 常用方式 uni.navigateTo({ url:'/pages/index/test', //建议这么写 ... 在当前页面跳转到test页面的时候 我希望传递一些参数 uni.navigateTo({ url:`/pages/index/test?id={this.id}&name=${this.name}`
  • Qt 线程与线程之间数据传递

    千次阅读 2020-11-11 11:12:57
    有时候我们需要不同的线程之间进行数据的传送,使得数据合并,达到完成的数据,这里简单记录下线程之间传递。基本思想通过槽函数也让线程1与线程2绑定发送数据与接受数据函数。 创建一个QT Widgets工程,添加两个...
  • 2)通过序列化对象在网络中传递对象; 3)通过序列化在进程间传递对象。 两种方法序列化. 一是实现Serializable接口(是JavaSE本身就支持的),implement Serializable一下就可以了 一是实现Parcelable接口(是...
  • 实际上等同于父子组件之间,数据的传递; 父传子 ---------&gt; 父绑定属性,子props接受属性值 子传父 ---------&gt; 触发自定义事件,子触发$emit,父接收 父组件触发子事件 -------&gt; 在父组件中...
  • 对象之间的通信

    千次阅读 2013-05-25 19:14:58
    对象之间进行通信最基本的方式就是消息传递,在Cocoa中提供Notification Center机制来完成这一任务。其主要作用就是负责在任意两个对象之间进行通信。使用方法很简单,如下几个步骤即可:  假设A与B之间进行通信...
  • JAVA在方法中对象作为参数传递

    千次阅读 2018-02-23 17:42:35
    但是在java中,将方法A中的某个对象传递到方法B中进行修改后,再返回到A中,我们会发现对象在B中的修改在A中也有效。示例代码如下:有一个bean类:public class DemoBean { private String id; pu...
  • C++对象之间通信的三种常见方式

    万次阅读 2017-11-03 18:53:19
    经过这一年多对C++的使用,总结出了下边的三种常见对象之间的通信方式。这里就不上代码了。只作为一种设计思想,记录下来方便自已以后使用,和大家一起学习,这只是自已在工作中的总结,如果谁有更好的经验,请回复...
  • postMessage跨域、跨iframe窗口消息传递

    千次阅读 多人点赞 2021-03-17 15:57:37
    window.postMessage()方法可以安全地实现Window对象之间的跨域通信。例如,在一个页面和它生成的弹出窗口之间,或者是页面和嵌入其中的iframe之间。 通常情况下,受浏览器“同源策略”的限制跨域问题一直是个问题,...
  • jsp页面之间如何传递一个js对象

    万次阅读 2016-09-02 14:02:08
    jsp页面之间如何传递一个js对象3 比如有两个jsp页面,a.jsp与b.jsp  在a.jsp中有一个js对象sellerInfo,我想要这个sellerInfo传递到b.jsp  使用 window.location = "b.jsp?data"+sellerInfo 的话 不可行  ...
  • 两个html页面之间怎么相互传递数据

    千次阅读 2020-12-01 23:19:08
    两个html页面之间怎么相互传递数据 这里说一种解决方案: 1.一个html中访问到另外一个html的路径上,在后面拼接上数据 2.在另外个html上通过dom对象模型中的location的search属性可以取到拼接的参数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 826,725
精华内容 330,690
热门标签
关键字:

对象之间的消息传递