2017-08-10 5 views
0

Ich versuche, benutzerdefinierte TypeConverter für Android Room Persistance Bibliothek wie in documentation gezeigt zu verwenden. Die Grundidee ist, alle Sqlite SUM zu formatieren, die Android Room Dao vorschaltet.Android Room TypeConverter für Double

Mein Code:

@TypeConverter 
public static double toDouble(String str) { 
    return FormatHelper.formatAmount(Double.parseDouble(str)); 
} 

@TypeConverter 
public static String fromDouble(double doub) { 
    return String.valueOf(FormatHelper.formatAmount(doub)); 
} 

Ich habe bereits versucht, Daten zu löschen und die App wieder aufzubauen. Konverter für Date in derselben Klasse funktionieren. Unterstützt der Android TypeConverter Primitive Variablen nicht?

EDIT:

I Typeconverter in RoomDatabase Klasse registrieren, so dass es über die gesamte Datenbank verwendet wird.

Genauer gesagt über mein Problem: wenn ich Abfrage in meiner Dao-Klasse wie diese:

@Query("SELECT SUM(quantity) FROM production_plan_item") 
Double getActivePlanItemsCount(); 

Es kann manchmal Wert wie 2,30000000000001 zurück.

Ich dachte, dass Typ-Konverter verwendet werden, um zurückgegebenen Wert von Abfragen zu verarbeiten. Und jedes Mal, bevor ich Double in die Datenbank speichere oder Double auswähle, würde mein TypeConverter das Double für mich runden und ich müsste es nicht jedes Mal runden, wenn ich etwas auswähle.

Ansonsten muss ich jedes einzelne ausgewählte Doppel manuell runden.

+0

"Grundidee ist, alle Sqlite SUM formatiert wählt, dass Android Room Dao Preforming ist" - das macht keinen Sinn für mich. Die Formatierung ist nicht Aufgabe einer Persistenzbibliothek. Dies liegt in der Verantwortung eines Präsentators oder eines anderen mit der Benutzerschnittstelle verbundenen Codes. Darüber hinaus, wo registrieren Sie diese 'TypeConverter' Methoden? Was erwarten Sie von ihnen? – CommonsWare

+0

@CommonsWare Ich habe meine Frage bearbeitet. – Yoda066

Antwort

0

Ich dachte, dass Typ-Wandler zurückgegebene Wert von Abfragen

Ihre @TypeConverter Methoden zwischen double und String konvertieren zu verarbeiten verwendet. SUM gibt keine String zurück. Ihre @Query Methode gibt Double zurück. Daher wird keine dieser Methoden relevant sein, da keine ->double Umwandlung stattfindet.

Ansonsten muss ich jedes einzelne ausgewählte Doppel manuell runden.

Vielleicht sollten Sie weniger Spalten in Ihrem Datenbankschema verwenden.

Verwandte Themen