Android:复杂数据模型的传递

来源:未知 责任编辑:智问网络 发表时间:2013-09-26 23:51 点击:

 

很久没有写了,一直不知道写什么,最近在研究怎样在Android的开发中传递一些复杂的数据。其实网上已经有很多的人都写过相关的,但是看了后,发现都大同小异,缺少我想要看到的地方。所以我打算做一下这方面的探讨。

      有时候在团队开发的时候,我们会考虑创建一些复杂(包含的数据类型有多种)的Model,方便在数据上的传输和处理。一些关于android中对于这类model的传递,一般都是实现Parcelable或者是Serializable这两个接口,这两个接口有一些不同,Serializable接口一般只做一些简单的数据类型传递,而Parcelable可以实现很多复杂的情况,比如Parcelable中嵌套了图片,实现了Parcelable的其他模型等,而对于这种复杂的类型,网上很难找到这样的内容,所以我做了一个例子来解决。

 

      首先,我创建了三个数据model:ArtistMode,TrackModel和AlbumModel,根据名字大家应该能够明白。这三个类中只有ArtistModel是实现的Serializable接口,另外两个都是实现的Parcelable接口。

      ArtistModel:歌手信息,包含了歌手的名字,年龄,性别和国籍,这些都是简单的String和int型数据;

      TrackMode:歌曲信息,包含歌曲的名字,发行时间和歌手列表(这里采用了一个存放ArtistMode的List);

      AlbumModel:专辑信息,包含了专辑的名字,歌手信息(ArtistMode),发行时间和歌曲列表(一个存放TrackModel的List)。

 

       介绍完了三个模型后,我们就要具体实现模型中数据的读写了。对于Parcelable或者是Serializable该复写哪些方法我也就不多说,网上对于这个介绍的都很多。现在是说说一个需要注意的地方。

 

 

Java代码 

@Override 

    public void writeToParcel(Parcel dest, int flag) { 

        dest.writeString(albumName); 

        dest.writeSerializable(artistModel); 

        dest.writeList(trackList); 

        dest.writeString(releaseTime); 

    } 

 

    public static final Parcelable.Creator<AlbumModel> CREATOR = new Parcelable.Creator<AlbumModel>() { 

 

        @Override 

        public AlbumModel createFromParcel(Parcel source) { 

 

            AlbumModel model = new AlbumModel(); 

            model.albumName = source.readString(); 

            model.artistModel = (ArtistModel) source.readSerializable(); 

            // 必须实例化 

            model.trackList = new ArrayList<TrackModel>(); 

            source.readList(model.trackList, getClass().getClassLoader()); 

 

            model.releaseTime = source.readString(); 

            return model; 

        } 

 

        @Override 

        public AlbumModel[] newArray(int size) { 

            return new AlbumModel[size]; 

        } 

    }; 

      注意上面在writeToParcel()方法中我用了一个dest.writeList(trackList);来传递一个List。相对应的读取里面,有这段代码:

 

Java代码 

// 必须实例化 

            model.trackList = new ArrayList<TrackModel>(); 

            source.readList(model.trackList, getClass().getClassLoader()); 

 

 这里要想读出存放进去的List,就必须先将List实例化,否则就读不出来数据。这是我在查看Android的源码后发型的,对于数据的读写,系统提供了一个比较全的读取方法是readValue,这个方法中,系统会自动进行数据匹配的,但是具体的使用,大家可以去尝试,只要明白读写的方式后,就不难实现了。

 

       上面是一个唯一需要特别注意的地方。其余的数据类型该怎么传递,大家可以尝试,接下来我会把整个项目上传,大家有什么问题可以留言。

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1