5

SyncFrameworkが文字列"0"/"1"をfalse/trueのブール値として処理できるようにするある種の型コンバーターを使用することは可能ですか。bool.parseのドキュメントによると、デフォルトではサポートされていないので、回避する方法はありますか?

誰かがこの問題への別のアプローチを提案できる場合の詳細:Android用のカスタムSync Frameworkクライアント実装があり、SQLiteデータベースを使用しているため、テーブルフィールドに厳密なデータ型を適用する方法がありません。たとえば、「Is」プレフィックスを使用してブールフィールドを示す規則を思い付くことができますが、それは厄介です。もう1つのことは、SQLiteのブール値は数値型として扱われるため、SQLiteデータベースにブール値false / trueを挿入/更新すると、自動的に0/1に変換され、Android側でTRUE / FALSE=1/0変換を導入したくないということです。 。

どんな考えでも大歓迎です。

[更新]詳細:サーバー側は、Microsoft Sync Framework4.0CTPを使用しているいくつかのサービスで構成されています。スコープの作成などを除いて、構成するものは多くありません。クライアント側はチェンジセットを生成し、JSON形式を使用してサーバーに送信します。チェンジセットはSQLiteデータベースから取得されます(SQLiteには数値0/1以外のネイティブのブール表現はありません)。したがって、データベースを読み取るときに、取得するデータがブール型であるという兆候はありません。フィールド値は数値("0"または"1")の文字列としてJSONオブジェクトにシリアル化されるため、サーバー側はブール値に解析しようとして失敗します。

ところで、一方向のクライアントからサーバーへの同期を行う場合は、これを回避することができます。サーバー側のエンティティフィールドタイプを手動でバイトに設定しましたが、SyncFrameworkはそれを「ビット」データベースタイプとしてうまく使用しています。この回避策は、サーバーからクライアントへの変換では機能しません。

4

4 に答える 4

2

C#/。NETでの通常の方法は、Convert.ToBoolean()

于 2011-04-29T14:20:21.333 に答える
0

Android側でTRUE/FALSE=1/0変換を導入したくない

SQLiteにはブール型がないので、そうしなければならないようです。

boolean active = cursor.getInt(column_idx)==1;
于 2011-04-29T14:22:59.177 に答える
0

Sync Frameworkビットについては、変更をインターセプトして変換を行うためにインターセプターを実装しようとしましたか?参照:方法:インターセプターを使用してサーバー上のビジネスロジックを拡張する

于 2011-05-01T01:49:01.103 に答える
0

ですから、私が求めることを簡単な方法で行うことは不可能です。最後に、Android同期ライブラリに追加機能を書き込んでSQLiteテーブル定義を解析し、フィールドの説明を使用して送信同期データをフォーマットすることを選択しました。

皆様のご尽力に感謝申し上げます。

于 2011-05-03T09:53:19.643 に答える