Android:复杂数据模型的传递

最近在研究怎样在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该复写哪些方法我也就不多说,网上对于这个介绍的都很多。现在是说说一个需要注意的地方。

@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];            }        };  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjyzw.html