3

私は財産を手に入れ、共有された慣習に固執しました。

コード全体でそれを参照する場所は2つあります。

firstRunTimestamp = wmbPreference.getLong(ApplicationData.ParametersInternals.FIRST_RUN_DATE, 0);

editor.putLong(ApplicationData.ParametersInternals.FIRST_RUN_DATE, new Date().getTime());

私のログでこの例外を見つけました

"java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong("

そして、スタックは、このコードがこのプロパティにアクセスするメソッド内にあることを示しています。誰かがそれがどのように可能であるかを説明できますか?

4

2 に答える 2

1

SharedPreferenceすべてのデータをキーと値のペアの形式で格納します。キーと値の両方が文字列です。(SharedPreferenceに値をLongとして明示的に格納する場合、これは当てはまりません。以下への返信を確認してください。)

文字列のLong値を次のように解析する必要があります

firstRunTimestamp = Long.parseLong(wmbPreference.getString(ApplicationData.ParametersInternals.FIRST_RUN_DATE, "0")); //Notice here, the default value is also made a string. 
于 2013-01-24T10:15:40.770 に答える
1

に同じキー値を持つ設定がないかどうかを確認しますpreference.xml。で定義されたプリファレンスpreference.xmlは常にString値として保存されることに注意してください。


別の解決策-最初にint実行時からの設定キーを定義し、後で同じキーをと定義することにした場合、コードを変更してStringも、それはをキャストできClassCastExcepionます。これは、共有設定ファイルのこのキー数値がとしてあるためIntです。これを回避するには、必要に応じてコードまたはデバイスから共有設定ファイルを削除し、アプリを再インストールします。

于 2016-06-18T14:30:34.207 に答える