• intent传对象



    intent还有一个很好用的地方,就是传输对象,但要注意的是这里的传输只是将对象复制了一份通过intent进行传递,并不能达到实时更新的效果,也就是这个对象等偏重于“读”。intent对这个对象有着严格的要求----Parcel。

    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])即可。估计本方法是供外部类反序列化本类数组使用。
     
      1 package com.yingjie.jzlfapp.model.local;
      2 
      3 import android.os.Parcel;
      4 import android.os.Parcelable;
      5 
      6 /**
      7  * 类名称: Dede_MemberAnswer 功能描述:回答的视图 作者: chrizz00 创建日期: 2014-1-23 下午2:04:50
      8  */
      9 public class PersonCenterAnswer implements Parcelable {
     10 
     11 
     12     private Integer tid;
     13     // 回答问题类型
     14     private String tidname;
     15     
     16     // 回答者id
     17     private Integer replierid;
     18     // 回答者
     19     private String replier;
     20     
     21     //问题的id
     22     private Integer questionid;
     23     //问题
     24     private String title;
     25     
     26     //提问者的id
     27     private Integer askerid;
     28     //提问者
     29     private String asker;
     30     
     31     //提问的时间
     32     private long asktime;
     33     //回答的时间
     34     private long answertime;
     35     //解决的时间
     36     private long solvetime;
     37     
     38     // 被采纳的回答的id
     39     private Integer bestanswer;
     40     
     41     //回答的id
     42     private Integer answerid;
     43     //回答的内容
     44     private String content;
     45 
     46     public PersonCenterAnswer() {
     47 
     48     }
     49 
     50     public PersonCenterAnswer(Integer tid, String tidname, Integer replierid,
     51             String replier, Integer questionid, String title, Integer askerid,
     52             String asker, long asktime, long answertime, long solvetime,
     53             Integer bestanswer, Integer answerid, String content) {
     54         super();
     55         this.tid = tid;
     56         this.tidname = tidname;
     57         this.replierid = replierid;
     58         this.replier = replier;
     59         this.questionid = questionid;
     60         this.title = title;
     61         this.askerid = askerid;
     62         this.asker = asker;
     63         this.asktime = asktime;
     64         this.answertime = answertime;
     65         this.solvetime = solvetime;
     66         this.bestanswer = bestanswer;
     67         this.answerid = answerid;
     68         this.content = content;
     69     }
     70     
     71     public Integer getTid() {
     72         return tid;
     73     }
     74 
     75     public void setTid(Integer tid) {
     76         this.tid = tid;
     77     }
     78 
     79     public String getTidname() {
     80         return tidname;
     81     }
     82 
     83     public void setTidname(String tidname) {
     84         this.tidname = tidname;
     85     }
     86 
     87     public Integer getReplierid() {
     88         return replierid;
     89     }
     90 
     91     public void setReplierid(Integer replierid) {
     92         this.replierid = replierid;
     93     }
     94 
     95     public String getReplier() {
     96         return replier;
     97     }
     98 
     99     public void setReplier(String replier) {
    100         this.replier = replier;
    101     }
    102 
    103     public Integer getQuestionid() {
    104         return questionid;
    105     }
    106 
    107     public void setQuestionid(Integer questionid) {
    108         this.questionid = questionid;
    109     }
    110 
    111     public String getTitle() {
    112         return title;
    113     }
    114 
    115     public void setTitle(String title) {
    116         this.title = title;
    117     }
    118 
    119     public Integer getAskerid() {
    120         return askerid;
    121     }
    122 
    123     public void setAskerid(Integer askerid) {
    124         this.askerid = askerid;
    125     }
    126 
    127     public String getAsker() {
    128         return asker;
    129     }
    130 
    131     public void setAsker(String asker) {
    132         this.asker = asker;
    133     }
    134 
    135     public long getAsktime() {
    136         return asktime;
    137     }
    138 
    139     public void setAsktime(long asktime) {
    140         this.asktime = asktime;
    141     }
    142 
    143     public long getAnswertime() {
    144         return answertime;
    145     }
    146 
    147     public void setAnswertime(long answertime) {
    148         this.answertime = answertime;
    149     }
    150 
    151     public long getSolvetime() {
    152         return solvetime;
    153     }
    154 
    155     public void setSolvetime(long solvetime) {
    156         this.solvetime = solvetime;
    157     }
    158 
    159     public Integer getBestanswer() {
    160         return bestanswer;
    161     }
    162 
    163     public void setBestanswer(Integer bestanswer) {
    164         this.bestanswer = bestanswer;
    165     }
    166 
    167     public Integer getAnswerid() {
    168         return answerid;
    169     }
    170 
    171     public void setAnswerid(Integer answerid) {
    172         this.answerid = answerid;
    173     }
    174 
    175     public String getContent() {
    176         return content;
    177     }
    178 
    179     public void setContent(String content) {
    180         this.content = content;
    181     }
    182 
    183     
    184     public PersonCenterAnswer(Parcel source) {
    185         
    186         this.tid = source.readInt();
    187         this.tidname = source.readString();
    188         this.replierid = source.readInt();
    189         this.replier = source.readString();
    190         this.questionid =source.readInt();
    191         this.title = source.readString();
    192         this.askerid = source.readInt();
    193         this.asker = source.readString();
    194         this.asktime = source.readLong();
    195         this.answertime =  source.readLong();
    196         this.solvetime =  source.readLong();
    197         this.bestanswer = source.readInt();
    198         this.answerid =source.readInt();
    199         this.content = source.readString();
    200     }
    201     
    202     
    203     @Override
    204     public int describeContents() {
    205         return 0;
    206     }
    207 
    208     @Override
    209     public void writeToParcel(Parcel dest, int flags) {
    210         dest.writeInt(tid);
    211         dest.writeString(tidname);
    212         dest.writeInt(replierid);
    213         dest.writeString(replier);
    214         dest.writeInt(questionid);
    215         dest.writeString(title);
    216         dest.writeInt(askerid);
    217         dest.writeString(asker);
    218         dest.writeLong(asktime);
    219         dest.writeLong(answertime);
    220         dest.writeLong(solvetime);
    221         dest.writeInt(bestanswer);
    222         dest.writeInt(answerid);
    223         dest.writeString(content);
    224     }
    225 
    226       public static final Parcelable.Creator<PersonCenterAnswer> CREATOR = new Parcelable.Creator<PersonCenterAnswer>(){
    227 
    228         @Override
    229         public PersonCenterAnswer createFromParcel(Parcel source) {
    230             
    231             return new PersonCenterAnswer(source);
    232         }
    233 
    234         @Override
    235         public PersonCenterAnswer[] newArray(int size) {
    236             
    237             return new PersonCenterAnswer[size];
    238         }
    239           
    240           
    241       };
    242 
    243     @Override
    244     public String toString() {
    245         return "PersonCenterAnswer [tid=" + tid + ", tidname=" + tidname
    246                 + ", replierid=" + replierid + ", replier=" + replier
    247                 + ", questionid=" + questionid + ", title=" + title
    248                 + ", askerid=" + askerid + ", asker=" + asker + ", asktime="
    249                 + asktime + ", answertime=" + answertime + ", solvetime="
    250                 + solvetime + ", bestanswer=" + bestanswer + ", answerid="
    251                 + answerid + ", content=" + content + "]";
    252     }
    253 
    254       
    255     
    256 }

    writeToParcel (Parcel dest, int flags) 和PersonCenterAnswer(Parcel source)方法体里面的write和read的顺序要一一对应,不能出错!!切记!!

    传输的时候直接intent.putExtra("answers", answerss);    (answers=PersonCenterAnswer)

    在接收端直接  PersonCenterAnswer person =(PersonCenterAnswer) getIntent().getParcelableExtra("answers");

    再次注意:这个person只是一个复制品,并不是传输前的那个对象。

    如果需要同步,可以考虑将这个对象回传回去,在替换成先前的那个对象,试过可行,稍麻烦。

  • 相关阅读:
    android: 在android studio中使用retrolambda的步骤
    Shiro基础知识03----shiro授权(编程式授权),Permission详解,授权流程(zz)
    [Android] 关于Android的问号?和@符号的用法
    20170506 《摔跤吧,爸爸》观影笔记
    Android关于log日志,华为不输出log.v,log.d(zz)
    阅读日志:协鑫一年的多晶硅料产能能够生产做少装机容量的组件?
    《周鸿祎自述》读书笔记
    使用promise 和 generator来管理工作流
    读书笔记,《刻意练习》,第三章,心理表征
    读书笔记,《刻意练习》,第四章,黄金标准
  • 原文地址:https://www.cnblogs.com/ws5861/p/3586774.html
Copyright © 2020-2023  润新知