2017-08-10 2 views
0

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.

+0

"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

+0

@CommonsWare J'ai modifié ma question. – Yoda066

Répondre

0

Je pensais que les convertisseurs de type sont utilisés pour traiter des requêtes valeur retournée

Vos @TypeConverter méthodes convertissent entre double et String. SUM ne renverra pas un String. Votre méthode @Query renvoie un Double. Par conséquent, aucune de ces méthodes @TypeConverter ne sera pertinente, car il n'y a pas de conversion String->double.

Sinon, je dois arrondir tous les doubles sélectionnés manuellement.

Peut-être que vous devriez utiliser moins de colonnes REAL dans votre schéma de base de données.