PreferenceからGetInt()で値をとろうとすると例外が発生する

3,312 views
Skip to first unread message

T.Sato

unread,
Nov 26, 2010, 5:40:39 AM11/26/10
to 日本Androidの会
いつもお世話になってます。
preferenceからIntの値を取りたいのですが、
GetInt()でClassCastExceptionの例外が発生します。

マニュアル(http://developer.android.com/reference/android/content/
SharedPreferences.html)の
GetInt()の項目で、returnの部分に

Throws ClassCastException if there is a preference with this name that
is not an int.

とありますが、項目がintであると明示する必要(方法)があるのでしょうか?
宜しくお願い致します。

main.java(抜粋)
-----------------------------------
int portNo = 0;
try{
    portNo = sp.getInt("pref_smtpPortNumber", 25);
}catch(Exception e){
int a;
a =1;
}
-----------------------------------


preference.xml(抜粋)
--------------------------------------
<EditTextPreference
android:key="@string/pref_smtpPortNumber"
android:title="SMTPポート番号"
android:summary="SMTPポート番号"
android:defaultValue="25"
android:dialogTitle="SMTPサーバポート番号"
android:dialogMessage="SMTPサーバで使用するポート番号を入力してください"
android:inputType="number"
/>
--------------------------------------

理人 蓮見

unread,
Nov 26, 2010, 6:00:55 AM11/26/10
to 日本Androidの会
はじめまして、蓮見理人と申します

自分もその例外が発生していました

解決策としてやったのが、GETStringで値を取得後、int型に変更しました

他のはわかりませんが

とりあえずで

以上です

T.Sato

unread,
Nov 26, 2010, 6:20:00 AM11/26/10
to 日本Androidの会
はじめまして。返信ありがとうございます。
某ワンコのいるブログの方でしょうか?
(違ったらごめんなさい(^^ゞ)

それはそれで考えたのですが、
また別途チェックを入れないとダメですよね・・・
Stringの型で数値「のみ」入力させる事が出来れば
その方法で良いのですが。

解決方法ご存知の方おりましたら是非。
> > --------------------------------------- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

理人 蓮見

unread,
Nov 26, 2010, 6:44:51 AM11/26/10
to 日本Androidの会
ワンコではないですねw

それはそれとして

数値のみならば
xmlのレイアウトの中で
android:numeric="integer"
と設定すると数値のみになります

android:maxLength="3"

と設定すると、最大桁数です

とりあえず、いろいろ試して、できたのがこれだったのでw
他にもあるかもしれませんが;;
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

yanagi

unread,
Nov 26, 2010, 6:23:10 AM11/26/10
to android-g...@googlegroups.com
こんばんは、高柳です。

対象のPreferenceファイルに、
既に同じキー名でStringで登録されているということはないでしょうか。

自身も以前に一度Stringで登録した後に、
ソース上でIntに変更していてハマったことがあります。

Preferenceファイルは以下のパスにありますので、
一度ご確認されてみてはいかがでしょうか。
/data/data/[アプリのパッケージ名]/shared_prefs/[Preferenceのファイル名]

ちなみに消す場合は、
SharedPreferences.Editor#clear
で消去が可能です。

--
高柳 翔
mail: sobac...@gmail.com
Twitter: sobachanko

2010年11月26日20:00 理人 蓮見 <rihito...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




T S

unread,
Nov 28, 2010, 12:50:08 AM11/28/10
to android-g...@googlegroups.com
高柳さんはじめまして。
お返事遅くなりましてすみません。
 
>対象のPreferenceファイルに、
>既に同じキー名でStringで登録されているということはないでしょうか。
 
前にそれでハマりまして、一番に確認しました。

結局は、理人蓮見さんの方法で、取得することにしました。
腑には落ちませんが・・・
 
お二方、ありがとうございました。
2010年11月26日20:23 yanagi <sobac...@gmail.com>:

Kou Kirishima

unread,
Nov 30, 2010, 12:10:59 AM11/30/10
to 日本Androidの会
http://developer.android.com/intl/ja/reference/android/preference/EditTextPreference.html

EditTextPreferenceのリファレンスを見ると、
「This preference will store a string into the SharedPreferences.」
(SharedPreferencesに対してstringを格納する)
となっているので、上記のやり方(stringからintに変換)が正しいのだと思います。
Reply all
Reply to author
Forward
0 new messages