2017-06-26 8 views
-1

私は、次のコードを持っています。これのデフォルト値(PreferenceScreen xml)は1483318800000に設定されています。何らかの理由で、それは科学的表記で始まります:1.48331876E12そして、上記のコードを実行した後:1483318760000。それは終わりに終わる。これはミリ秒単位のタイムスタンプであるため、正しいことが必要です。私は午後8時に撮影していますが、午後7時59分になってしまいます(変換後は消えてしまいます)。誤った変換

私がLong.parseLong(defaultValue.toString())を実行すると、NumberFormatExceptionが得られます。科学的表記であるためです。

「良い」の変換をどうすれば保証できますか?

編集:変換コードは、上に示したコードの最初の行です。私はそうのようなデフォルト値を設定しています。そして、それはthis functionに渡さ

<TimePreference 
      android:defaultValue="1483318830000" 
      android:key="settings_night_mode_start_time" 
      android:title="@string/settings_night_mode_start" /> 

を。

+4

1483318800000を1.48331876E12に変換する場所を修正しました。その部分が悪いです。正しい値は1.4833188E12である必要があります。 – Tom

+1

会話コードを1.48331876E12に表示 –

+1

「defaultValue」にはどのような種類がありますか? –

答えて

1

@のrustotの答えのおかげで、私はthere is an issue with Preferences in Android regarding parsing the default values.

修正プログラムは、文字列リソースの代わりに、私はそれを与えていたlong値にデフォルト値を設定したことが分かりました。

<string name="settings_night_mode_default_start_time" translatable="false">1483318830000</string>

<TimePreference 
      android:defaultValue="@string/settings_night_mode_default_start_time" 
      android:key="settings_night_mode_start_time" 
      android:title="@string/settings_night_mode_start" /> 

予想通りこれは動作します。 :)

3

コードの前のいくつかの場所では、この値は既にFloat(Doubleではない)に変換されてからstringに戻ります。

System.out.println(Float.valueOf("1483318800000")); 

1.48331876E12

+0

Androidに問題があるようです。その長さの 'Preference' xmlのデフォルト値を設定すると、自動的にfloatに変換されることがあります。ありがとう! – Nxt3

+0

[私が正しいと分かります](https://room-15.github.io/blog/2015/03/30/beware-of-preference-default-values-in-xml/)。あなたのおかげで、私は解決策を見つけました。それは有り難いです! – Nxt3