J'essaie d'utiliser TypeConverter personnalisé pour la bibliothèque Android Persistance Room comme indiqué dans documentation. L'idée principale est de formater toutes les sélections Sqlite SUM qu'Android Room Dao effectue.Android Room TypeConverter pour Double
Mon 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));
}
J'ai déjà essayé d'effacer les données et reconstruire l'application. Les convertisseurs de date de la même classe fonctionnent. Est-ce que les TypeConverters Android ne prennent pas en charge les variables Primitives?
EDIT:
I inscrire TypeConverter en classe RoomDatabase il est utilisé dans la base de données entière.
Plus précisément au sujet de mon problème: si j'ai requête dans ma classe Dao comme ceci:
@Query("SELECT SUM(quantity) FROM production_plan_item")
Double getActivePlanItemsCount();
Il peut parfois revenir comme valeur 2,30000000000001.
Je pensais que les convertisseurs de type sont utilisés pour traiter la valeur retournée des requêtes. Et chaque fois que j'économise le double de la base de données ou que j'en sélectionne le double, mon TypeConverter contourne le double pour moi et je ne devrais pas l'arrondir chaque fois que je sélectionne quelque chose.
Sinon, je dois arrondir tous les doubles sélectionnés manuellement.
"L'idée principale est de formater tous les Sqlite SUM sélectionnés par Android Room Dao" - cela n'a aucun sens pour moi. Le formatage n'est pas la responsabilité d'une bibliothèque de persistance. C'est la responsabilité d'un présentateur ou d'un autre morceau de code associé à l'interface utilisateur. Au-delà, où inscrivez-vous ces méthodes 'TypeConverter'? Qu'attendez-vous qu'ils affectent? – CommonsWare
@CommonsWare J'ai modifié ma question. – Yoda066