Androidアプリケーションの中で、私たちは通常、データのバンドルを渡すために使用し、基本的なデータ型に加えて、クラスオブジェクトも渡すことができ、かつParcelableまたはSerializableのクラスの直列化インタフェースを達成するために必要とされます。
カスタムクラス帳を仮定します。
1は、Serializableインタフェースを実現するために、ランタイムは例外をスローします。
2月27日10:45:58.779:E / AndroidRuntime(14811):java.lang.RuntimeException:によって引き起こさParcelableがにIOExceptionが直列化可能なオブジェクトを書い遭遇
(名= com.example.testinter.MainActivity $ディスク)
可能的原因:
(1)問題のクラス帳へのアクセスを、例えば:クラスは内部クラスです。この時点で、それは、静的または別のクラスBook.javaとして定義ブックブックとして定義することができます。
クラスブック内の他の道具のいかなる存在しない直列化可能クラスオブジェクト(2)。例えば:ビットマップ、APIの実装は、この時間は、ブックParcelableインタフェースを実現するために変更する必要がでParcelableインタフェースであることが判明している参照してください。[元の基準http://www.cnblogs.com/mengyan1124/p/5765580.html ]
独立した書評書かBook.javaは別のクラスで、Parcelableインタフェースを実装する2、これは、特に次の点に注意し、少し複雑インタフェース:
(1)静的定数Parcelable.Creator <ブック> CREATORを定義します。
シーケンシャルリード(2)は、フィールドが一致している属性。
フィールドがシーケンスの書き終わりで書かれていない場合(3)、そうでない場合は読まれなければならない読んだときに、後続のすべてのフィールドが誤っています。フィールドが読み取りない場合はこのように、シーケンスの最後にそれを書きたい書き込みやありません。推奨事項:読んでいない場合は、セキュリティ上の理由から、書かれたフィールドは、フィールドが存在しないことを意味し、読み込まれます。
最後に、修正Book.javaを添付
1つの パッケージcom.example.testinter。
2
3 インポートandroid.graphics.Bitmap。
4 インポートandroid.os.Parcel。
5 インポートandroid.os.Parcelable。
6
7 パブリック クラスブック実装Parcelable {
8
9 公共 int型のIDを、
10
11 公共 のint ISBN。
12
13 公共の文字列デ。
14
15 公共のビットマップビットマップ。
16
17 公的ブック(){}
18
19 // 読み込み順:上記のID --->ビットマップ--->デ---> ISBN
20 // 、あなたがシーケンスの最後にフィールドに書き込まれていない場合、あなたが読まなければならない、そうでない場合は、後続のすべての分野エラーの読み取りがします
21は 公衆ブック(パーセルパーセル){
22は // TODO自動生成コンストラクタスタブ
23である ID = ; parcel.readInt()
24 ビットマップ= parcel.readParcelable(ビットマップクラス .getClassLoader()); // ビットマップを読み込む
25 DES = ; parcel.readString()
26である ISBN = parcel.readInt();
27 }
28
29 @Override
30 公共の INTをdescribeContents(){
31 // TODO自動生成方法スタブ
32 戻り 0 ;
33 }
34
35 // 写入顺序:ID --->ビットマップ---> DES ---> ISBN
36 @Override
37 公共 ボイド writeToParcel(パーセルのパーセル、int型フラグ){
38 // TODO自動生成方法スタブ
39 parcel.writeInt(ID)。
40 parcel.writeParcelable(ビットマップ、フラグ)。 // ビットマップ的写入
41 parcel.writeString(DES)。
42 parcel.writeInt(ISBN)。
43 }
44
45 パブリック 静的 最終 Parcelable.Creator <ブック> CREATOR = 新しいクリエーター<ブック> (){
46
47 @Override
48 公的ブック([] NEWARRAY INT サイズ){
49 // TODO自動生成方法がスタブ
50 リターン 新しい予約を[サイズ]。
51 }
52
53 @Override
54 公的ブックcreateFromParcel(パーセルのパーセル){
55 // TODO自動生成方法スタブ
56 リターン 新しいですブック(小包)。
57 }
58 }。
59 }