2017-08-10 3 views
0

documentationのようにAndroid Room Persistance Library用のカスタムTypeConverterを使用しようとしています。主なアイデアは、すべてのSqlite SUMをフォーマットして、Android Room Daoが実行されていることを選択することです。Android用ルームタイプコンバーター

マイコード:

@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)); 
} 

私はすでに、データを消去し、アプリを再構築しようとしました。 同じクラスのDateのコンバーターが機能しています。 Android TypeConvertersはプリミティブ変数をサポートしていませんか?

EDIT:

それはデータベース全体にわたって使用されているので、私はRoomDatabaseクラスでのTypeConverterを登録します。具体的には私の問題について

:私はこのような私のダオクラスでクエリを持っている場合:

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

それは時々2.30000000000001のような値を返すことがあります。

私は、タイプコンバータがクエリの戻り値を処理するために使用されると考えました。そして、データベースに2倍のデータを保存する前、または2倍のデータを選択する度に、私のTypeConverterが私の倍のラウンドになり、何かを選択するたびにラウンドする必要はありません。

それ以外の場合は、選択したすべてのダブルを手動で丸める必要があります。

+0

「主なアイデアは、すべてのSqlite SUMをフォーマットして、Android Room Daoが実行していることを選択することです」 - それは意味をなさない。書式設定は永続ライブラリの役割ではありません。これは、プレゼンターまたはユーザーインターフェイスに関連付けられた他のコードの責任です。それ以外に、これらの 'TypeConverter'メソッドをどこに登録していますか?あなたは彼らが何を期待していますか? – CommonsWare

+0

@CommonsWare私は私の質問を編集しました。 – Yoda066

答えて

0

私はあなたの@TypeConverter方法がdoubleString間の変換型コンバータは、クエリ

の戻り値を処理するために使用されていることを考えました。 SUMStringを返しません。 @QueryメソッドがDoubleを返しています。したがって、これらの方法のどれも、String < - >doubleの変換が行われないので、どちらも関連性がありません。

それ以外の場合は、選択した1つのダブルを手動で丸める必要があります。

おそらく、データベーススキーマでは、より少ない数のREALを使用する必要があります。