Wenn ein Fehler auftritt, ist die Methode put double für diesen Typ von sharedPreferences-Editor undefiniert. Eclipse erhält eine Schnellkorrektur zum Hinzufügen von Cast zum Editor, aber wenn ich das tue, werden immer noch Fehler angezeigt. Warum kann ich double nicht setzen?
Der Code:
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (TextUtils.isEmpty(editBl.getText().toString())) {
numberOfBl = 0;
} else {
numberOfBl = Integer.parseInt(editBl.getText().toString();
}
if (TextUtils.isEmpty(editSt.getText().toString())) {
tonOfSt = 0;
} else {
tonOfSt = Double.parseDouble(editSt.getText().toString());
}
SharedPreferences prefs = getSharedPreferences(
"SavedTotals", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("savedBl", numberOfBl);
editor.putDouble("savedSt", tonOfSt);
editor.commit();
}
android
sharedpreferences
Robert
quelle
quelle
Antworten:
Diejenigen, die vorgeschlagen haben, putFloat und getFloat zu verwenden, liegen leider sehr falsch. Das Werfen eines Double auf einen Float kann dazu führen
Diejenigen, die einen toString und einen parseString vorschlagen, sind nicht falsch, aber es ist eine ineffiziente Lösung.
Der richtige Weg, damit umzugehen, besteht darin, das Double in sein Äquivalent "Raw Long Bits" umzuwandeln und so lange zu speichern. Wenn Sie den Wert lesen, konvertieren Sie zurück in double.
Da die beiden Datentypen dieselbe Größe haben, verlieren Sie nicht an Genauigkeit und verursachen keinen {over, under} -Fluss.
Alternativ können Sie den Getter wie folgt schreiben:
quelle
double
Wert als Zeichenfolge speichern, ruinieren Sie Ihren Speicher und machen ihn zu einem Wrack !!Kotlin-Erweiterungsmethode (viel hübscher als die Verwendung von seltsamen Utils-Klassen oder was auch immer)
quelle
Was ich getan habe, war die Einstellung als String zu speichern:
und um das Double abzurufen, verwenden Sie einfach Double.parseDouble:
quelle
doubleToRawLongBits
bereits erwähnte Methode. Dies ist der falsche Weg, nicht weil es nicht funktioniert, sondern weil es sehr ineffizient ist.Sie können SharedPreferences jederzeit implementieren und die Android-Implementierung umbrechen.
quelle
Überprüfen Sie diese Liste https://gist.github.com/john1jan/b8cb536ca51a0b2aa1da4e81566869c4
Ich habe eine Preference Utils-Klasse erstellt, die alle Fälle behandelt.
Es ist einfach zu bedienen
In Vorlieben speichern
Von der Präferenz kommen
quelle