当前位置: 移动技术网 > IT编程>开发语言>Java > Android中Parcelable的作用实例解析

Android中Parcelable的作用实例解析

2019年07月22日  | 移动技术网IT编程  | 我要评论

在android提供了一种类型:parcel。被用作封装数据的容器,封装后的数据可以通过intent或ipc传递。 除了基本类型以外,只有实现了parcelable接口的类才能被放入parcel中。
 
parcelable实现要点:需要实现三个东西

1)writetoparcel 方法。该方法将类的数据写入外部提供的parcel中.声明如下:
writetoparcel (parcel dest, int flags) 具体参数含义见javadoc

2)describecontents方法。没搞懂有什么用,反正直接返回0也可以

3)静态的parcelable.creator接口。本接口有两个方法:

createfromparcel(parcel in) 实现从in中创建出类的实例的功能

newarray(int size) 创建一个类型为t,长度为size的数组,仅一句话(return new t[size])即可。估计本方法是供外部类反序列化本类数组使用。

测试用的接收信息activity:

import android.app.activity;  
 
import android.content.intent;  
 
import android.os.bundle;  
import android.os.parcelable;  
 
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 java.util.hashmap;  
 
import android.app.activity;  
import android.content.intent;  
import android.os.bundle;  
 
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;  
 
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;  
    }  
  };  
 
} 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网