`
iaiai
  • 浏览: 2211005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activity 间传递对象, 采用Parcelable

 
阅读更多
android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。

Parcelable实现要点:需要实现三个东西

  • writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
  • 引用
    writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
  • describeContents方法。没搞懂有什么用,反正直接返回0也可以
  • 静态的Parcelable.Creator接口,本接口有两个方法:
  • 引用
    createFromParcel(Parcel in) 实现从in中创建出类的实例的功能
    newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。



测试用的接收信息Activity
import com.iaiai;   
 
import android.content.Intent;   
 
import android.os.Bundle;   
import android.os.Parcelable;   

/**
 * 
 * <p>
 * Title: Test.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-7-21
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class Test extends Activity {   
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        Intent i = getIntent();   
        Person p = i.getParcelableExtra("yes");   
        System.out.println("---->"+p.name);   
        System.out.println("---->"+p.map.size());   
    }   
}


发送的Activity
import com.iaiai;   
  
import android.app.Activity;   
import android.content.Intent;   
import android.os.Bundle;   

/**
 * 
 * <p>
 * Title: TestNew.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-7-21
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class TestNew extends Activity {   
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        Intent intent = new Intent();   
        Person p = new Person();   
        p.map = new HashMap<String,String>();   
        p.map.put("yes", "ido");   
        p.name="ok";   
        intent.putExtra("yes", p);   
        intent.setClass(this, Test.class);   
        startActivity(intent);   
    }   
}


Parcelable的实现类
import java.util.HashMap;   

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

/**
 * 
 * <p>
 * Title: Person.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-7-21
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class Person implements Parcelable {   
  
    public HashMap<String,String> map = new HashMap<String,String> ();   
       
    public String name ;   
    @Override  
    public int describeContents() {   
        return 0;   
    }   
  
    @Override  
    public void writeToParcel(Parcel dest, int flags) {   
  
        dest.writeMap(map);   
        dest.writeString(name);   
    }   
    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {   
	//重写Creator
  
        @Override  
        public Person createFromParcel(Parcel source) {   
            Person p = new Person();   
            p.map=source.readHashMap(HashMap.class.getClassLoader());   
            p.name=source.readString();   
            return p;   
        }   
  
        @Override  
        public Person[] newArray(int size) {   
            // TODO Auto-generated method stub   
            return null;   
        }   
    };   
  
}
分享到:
评论

相关推荐

    Android Parcelable序列化自定义类集合在Activity间传递

    综上所述,要理解并实现Android中Parcelable序列化自定义类集合在Activity间传递,开发者需要掌握Parcelable接口的使用、自定义类的Parcelable实现、集合处理、Intent数据传递,以及可能借助的源码阅读和辅助工具。...

    Inetent传递对象parcelable

    在Android应用开发中,Intent是一种强大的工具,用于在组件之间传递数据和启动操作。然而,当我们需要在Intent中传递复杂的...通过深入理解并熟练掌握Parcelable接口,你将能够更有效地在Android组件间传递复杂数据。

    Activity传递对象的3种方法(全)

    本文将详细介绍如何使用三种方法来传递对象:Parcelable、Serializable和Bundle,这些方法适用于不同类型的对象,包括基本类型、字符串、布尔值、数组、ArrayList以及自定义复杂对象如UUID和浮点类型。 ### 1. ...

    Activity之间传递对象的Demo

    三、使用Parcelable传递对象 在发送Activity中,我们可以这样创建Intent并添加对象: ```java User user = new User("Tom", 25); Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("user...

    android activity之间传递对象

    本篇将详细讲解如何在Android的Activity之间传递对象,主要涉及两种常见的实现方式:Parcelable和Serializable。 一、Parcelable接口 Parcelable是Android系统提供的一种高效的数据序列化方式,它允许对象直接在...

    Activity之间对象传递的两种方式

    首先,我们来理解为什么需要在Activity之间传递对象。在多Activity的应用中,可能需要在不同的Activity之间共享数据,这些数据可能是简单的基本类型,如字符串、整数,也可能是复杂的自定义对象。Android的Intent...

    Activity传递类对象源码

    Activity间要传递数据,很多时候简单的int和string满足不了需求,我们在面向对象中已经习惯了类和对象, 那么下面就说一下如何传递类对象。 Android中有两种办法来完成这件事。一个是Java的序列化(Serializable)...

    实现Parcelable接口的方式借助Intent实现Android工程中Activity之间Java对象的传递.zip

    通常,我们使用Intent来在不同Activity之间传递数据,但当需要传递复杂对象时,如自定义的Java对象,就需要使用到Parcelable接口。这个压缩包文件"实现Parcelable接口的方式借助Intent实现Android工程中Activity之间...

    两个Activity在调用StartActivity的时候传递序列化信息

    - 虽然序列化是一种方便的方法,但也可以考虑使用其他方式,如使用Parcelable接口(更高效,但更复杂),或者通过Bundle传递基本类型和简单对象。 5. **rar标签**:在这里,"rar"可能是一个误输入,因为RAR是一种...

    Android Activity间传递自定义类的对象

    当我们需要在不同的Activity之间传递数据时,通常会使用Intent对象。对于简单的数据类型,如字符串、整数等,Intent提供了便捷的方法进行传递。然而,当需要传递自定义类的对象时,就需要采取一些特殊的方法。以下是...

    Android-Activity之间数据传递的多种方式

    Intent是Android系统中用于启动组件(如Activity)的一种消息对象,同时也可以用来在组件间传递数据。Intent的数据传递有两种类型:显式和隐式。 1. 显式Intent:通过指定目标Activity的类名,可以精确地启动某个...

    Android进程间传递对象

    总结,Android中进程间传递对象数据主要依赖Parcelable接口和Service。Parcelable提供了高效的序列化机制,而Service则为跨进程通信提供了基础。通过实现这两个核心组件,开发者可以实现复杂对象在不同Android进程...

    Activity跳转时传递Bitmap对象

    在Activity间传递Bitmap,有两种主要方式:Intent extras和使用Parcelable接口。由于Bitmap对象较大,直接通过Intent的extras传递可能会导致内存溢出,因为Intent的大小有限制。因此,更推荐使用Parcelable接口。 1...

    两个Activity之间传递参数的代码

    Intent是Android中用来启动Activity或Service的类,也可以用于在Activity间传递数据。对于简单的数据类型(如字符串、整型、浮点型、布尔型等),我们可以在创建Intent时直接附加数据。 例如,在`LoginActivity....

    android 传递对象

    Android提供了多种方式来传递对象,包括Intent、Bundle、Parcelable、Serializable等。下面将详细讲解这些方法及其适用场景。 首先,Intent是Android系统用来启动Activity或Service的主要手段,同时也支持传递数据...

    Android例子源码Activity间的数据传递

    在Activity间传递数据时,我们通常创建一个Intent对象,然后通过putExtra()方法添加数据,最后用startActivity()或startActivityForResult()启动目标Activity。 2. **基本类型数据传递**: Android允许我们将基本...

    activity与activity利用接口相互传递数据

    在ActivityA的类定义上添加`implements Parcelable`并实现相关方法。当然,也可以使用`Gson`或`Jackson`库将接口对象转换为字符串再传递。 在目标Activity(ActivityB)中,接收到数据后,调用接口方法将数据回传给...

    Android aidl实现传递对象

    本文将深入探讨如何利用AIDL在Android应用间传递对象。 首先,我们需要理解AIDL的基本概念。AIDL文件是一种定义接口的文本文件,它以.aidl为扩展名,包含了方法签名和数据类型声明。这些定义会被Android编译器转换...

    Android Intent传递数据大小限制详解

    Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...

    Intent传递对象、对象数组

    总结,Intent在Android开发中扮演着核心角色,通过实现Parcelable接口,我们可以顺利地在Intent中传递对象和对象数组,实现不同组件之间的数据交互。在实际开发中,根据具体需求和性能要求选择合适的数据传递方式。

Global site tag (gtag.js) - Google Analytics