スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Android】簡単メモ帳 - バージョン 1.1.0

2012/05/08 (火) 00:50

バージョンアップ

■変更点
1.カレンダー画面にて例外が発生する場合がある不具合の対応。
例外が発生している方はバージョンアップをお願いします。

■詳細
舌の根も乾かぬ内にという感じですね(汗)
1.0.9を公開後「アプリケーション エラー レポート」で例外が3件ほど上がっていました。
以下発生していた例外の詳細
----------
■クラッシュ
 例外クラス:android.os.BadParcelableException
 例外発生メソッド:Parcel.readParcelable()
--------------------------------------------------------------------------------
■スタック追跡
java.lang.RuntimeException: Unable to start activity ComponentInfo{tak.tools.memo/tak.tools.memo.Top}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class tak.tools.memo.Top$SaveData
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
at android.app.ActivityThread.access$1500(ActivityThread.java:121)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3701)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class tak.tools.memo.Top$SaveData
at android.os.Parcel.readParcelable(Parcel.java:1967)
at android.os.Parcel.readValue(Parcel.java:1846)
at android.os.Parcel.readMapInternal(Parcel.java:2083)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getBundle(Bundle.java:1078)
at android.app.Activity.onRestoreInstanceState(Activity.java:842)
at tak.tools.memo.Top.onRestoreInstanceState(Top.java:813)
at android.app.Activity.performRestoreInstanceState(Activity.java:816)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1637)
... 11 more
----------
カレンダー画面では表示中のカレンダーの年月日を「java.util.Calendar」オブジェクトで管理しています。
んで、これを先日の更新時に「protected void onSaveInstanceState(Bundle outState)」メソッド内で引数の「outState」に保存するようにしたのですが、型が特殊なので「Parcelable」を利用していました。
が、どうやら上手く使いこなせていない模様。
一時保存データを復元するときに例外が発生している様です。
ただし、必ず発生するわけではありません。
何しろtakはこの現象を再現できていません(汗)

●対処方法
仕方が無いのでとりあえず以下の方法で回避することにしました。
Calendarをlongに変換し、「Bundle.putParcelable()」を廃止して「Bundle.putLong()」で保存するようにする。
復元時にはlongからCalendarを作るようにする。
これで「Parcelable」を使用せずにデータの保存と復元を行うようになったので「BadParcelableException」は発生しなくなると思われます。

対処したは良いものの、そもそもこの状況が再現できていないので根本的な解決になっているのかどうかいまいち確信が持てません。
とりあえず暫定処置ということで、例外が発生している方々にはご迷惑をおかけしております(汗)
「Parcelable」はいつかは使いこなす必要が出てきそうな機能なので、今後の課題ですね。

取り急ぎこんな感じです。
関連記事
スポンサーサイト
検索フォーム
RSSリンクの表示
カレンダー
04 | 2012/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。