FC2ブログ

 

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

「ListPreference.getSummary」がAndroid 2.3までと3.0以上で挙動が違う件 

少し前の話になりますが、自作Androidアプリ『騰落レシオ通知』のバージョンアップ時に、Android 4.1のエミュレータを軽い気持ちで試したみたところ、まさかのエラー発生;

参考までに対処方法をメモしておきます。

下記の通り、本来は2.3みたく赤枠部分をタップすると設定画面に遷移しますが、4.1だとエラーで落ちてしまいます。
また、正常/異常の境界となるバージョンはどこか試したところ、2.3と3.0の間でした。

【2.3の場合】
20130521_ListPreference_getSummary_2_3

【4.1の場合】
20130521_ListPreference_getSummary_4_1

その際のエラーログは下記の通りです。
(エラー発生時刻は省略)


E/AndroidRuntime(781): FATAL EXCEPTION: main
E/AndroidRuntime(781): java.util.UnknownFormatConversionException: Conversion:
E/AndroidRuntime(781): at java.util.Formatter$FormatSpecifierParser.unknownFormatConversionException(Formatter.java:2304)
E/AndroidRuntime(781): at java.util.Formatter$FormatSpecifierParser.advance(Formatter.java:2298)
E/AndroidRuntime(781): at java.util.Formatter$FormatSpecifierParser.parseConversionType(Formatter.java:2377)
E/AndroidRuntime(781): at java.util.Formatter$FormatSpecifierParser.parseArgumentIndexAndFlags(Formatter.java:2348)
E/AndroidRuntime(781): at java.util.Formatter$FormatSpecifierParser.parseFormatToken(Formatter.java:2281)
E/AndroidRuntime(781): at java.util.Formatter.doFormat(Formatter.java:1069)
E/AndroidRuntime(781): at java.util.Formatter.format(Formatter.java:1040)
E/AndroidRuntime(781): at java.util.Formatter.format(Formatter.java:1009)
E/AndroidRuntime(781): at java.lang.String.format(String.java:1998)
E/AndroidRuntime(781): at java.lang.String.format(String.java:1972)
E/AndroidRuntime(781): at android.preference.ListPreference.getSummary(ListPreference.java:152)
E/AndroidRuntime(781): at android.preference.Preference.onBindView(Preference.java:522)
E/AndroidRuntime(781): at android.preference.Preference.getView(Preference.java:460)
E/AndroidRuntime(781): at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:221)
E/AndroidRuntime(781): at android.widget.AbsListView.obtainView(AbsListView.java:2271)
E/AndroidRuntime(781): at android.widget.ListView.makeAndAddView(ListView.java:1769)
E/AndroidRuntime(781): at android.widget.ListView.fillDown(ListView.java:672)
E/AndroidRuntime(781): at android.widget.ListView.fillFromTop(ListView.java:733)
E/AndroidRuntime(781): at android.widget.ListView.layoutChildren(ListView.java:1622)
E/AndroidRuntime(781): at android.widget.AbsListView.onLayout(AbsListView.java:2106)
E/AndroidRuntime(781): at android.view.View.layout(View.java:13754)
E/AndroidRuntime(781): at android.view.ViewGroup.layout(ViewGroup.java:4364)
E/AndroidRuntime(781): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
E/AndroidRuntime(781): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
E/AndroidRuntime(781): at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)


なお、ログに自分のアプリ名は出力されていません。
そのため、ログを上から順に読んでいって心当たりのある箇所を探すことに。

結局、原因は13行目の「ListPreference.getSummary」でした。
Androidのソースを確認したところ、3.0からはgetSummary内で、

String.format(String format, Object... args)

を呼ぶように変わっていました。

アプリ内のsetSummaryでサマリー(上図【2.3の場合】の黄枠部分)にパーセンテージを表す「%」を設定していましたが、それが表示される際に、AndroidのフレームワークでgetSummaryが実行され、その中のformatが「%」をうまく解釈できずにエラーが発生しているようでした。

ここまで分かれば、後は修正するだけ。

下記サイトを参考にさせていただき、アプリが稼働するバージョンを判定して、
2.3以下の場合は「%」をそのまま、
3.0より大きい場合は「%」をエスケープして「%%」として設定しました。

以上、何かのお役に立てれば幸いです☆

稼働中の端末のPlatform(API level・バージョン) を取得する↓
http://androyer.blogspot.jp/2012/02/platformapi-level.html?m=1

全ての創造はたった一人の「熱狂」から始まる。『起業家』 

サイバーエージェント社長、藤田晋さんの著書『起業家』を読みました。

起業家起業家
(2013/04/12)
藤田 晋

商品詳細を見る


正反対の道を歩く堀江貴文さんと藤田晋さん。
堀江さんもすごいと思いますが、私の考え方は断然藤田さん派です。

著書内で藤田さんが気づかされたという、幻冬舎 見城社長の言葉、
「全ての創造はたった一人の『熱狂』から始まる」

とても印象に残りました!

『ブクペ』での紹介ページはこちら↓
http://bukupe.com/summary/8912

Androidアプリ『騰落レシオ通知』バージョンアップ(2.1)のお知らせ☆ 

自作Androidアプリ『騰落レシオ通知』をバージョンアップしました!
バージョン「2.1」では、下記の2機能を追加しました。

①騰落レシオの前日比を表示
→上げ幅または下げ幅を簡単に確認できるようにしました。

②境界またぎ(上限値を下回ったまたは下限値を上回った)日に通知するオプションを追加
→騰落レシオが落ち着いたタイミングでも通知を受けられるようにしました。
アプリ起動→Menuボタン→設定→「境界またぎ日に通知する」より設定できます。

通知のオプションが増えて分かりにくくなったかもしれませんので、
ここでいったんまとめておきます。

まず、通知タイミングを変えるために設定する項目は、下記設定画面の赤枠内の2項目です。

20130505_騰落レシオ通知設定

そこで、例えば騰落レシオが下記グラフみたく変わったとすると、

20130505_オプションの効果を説明するためのグラフ

オプションの設定内容ごとの通知タイミングは、下記の表の通りとなります。

20130505_通知タイミング

ご活用ください☆

『騰落レシオ通知』(有料版)のページはこちら↓
http://play.google.com/store/apps/details?id=jp.ddo.akairo.android.updownrationotifier

『騰落レシオ通知Free』(無料版)のページはこちら↓
http://play.google.com/store/apps/details?id=jp.ddo.akairo.android.updownrationotifierfree

『9割が無料で遊ぶソーシャルアプリのマネタイズの仕組み』のまとめ(初ブクペ) 

『9割が無料で遊ぶソーシャルアプリのマネタイズの仕組み』を読みました。
ずる賢いと感じることもありましたが、なかなか面白かったです☆

9割が無料で遊ぶソーシャルアプリのマネタイズの仕組み9割が無料で遊ぶソーシャルアプリのマネタイズの仕組み
(2012/09)
加藤 友助、寺尾 剛 他

商品詳細を見る


覚えておくとタメになりそうだと思ったことを箇条書きで『ブクペ』(※)にメモしました。

※ブクペは本の要約・本のまとめが見つかるサイトです。
読みたい本を探したり、読んだ本のまとめを作ることができます。
まとめがたくさん見られると、報酬ももらえます。

『ブクペ』での紹介ページはこちら↓
http://bukupe.com/summary/8887
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。