カスタムクラスのオブジェクトは、注意事項ParcelableまたはSerializableインタフェースを実装します

    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 }

 

おすすめ

転載: www.cnblogs.com/sparrowlhl/p/11242727.html
おすすめ