私のデータベーステーブルにINTEGER
というカラムがあり、それに1476355625598
という値を(既存のローを更新することによって)保存しました。Android SQLite long値がint値として取得/キャストされる
クエリを実行して値をすぐに確認すると、同じ正しい値が返され、1476355625598
が返されます。
しかし、IntentServiceが後で値を取得すると、-1113124226
という値が返されています。
-1113124226
は、(int)1476355625598
と同じ値です。
この列を変更するすべてのコード行にデバッグ出力を追加しました。値を更新している他のデータベース操作がないことを確認できます。
だから、何かが私の長いintに鋳造されているようだ...任意のアイデアどのように/なぜこれが起こっている可能性がありますか?
NB - 私が保存している値は、タイムスタンプ(ミリ秒形式)です。これは、文字列形式で保存する方が望ましいです。
UPDATE
私のデータベースは、コンテンツプロバイダ経由でアクセス可能ですので、私は私のMyApplicationというクラスにコンテンツオブザーバを追加しました。問題のテーブルの他の更新は報告されません。今は解決
UPDATE#2
問題。コメントを参照してください...
データベースからどのように値を取得しますか?あなたは長い価値を得ようとしましたか?あなた(または使用するシステム)がCursor上でIntegerのゲッターを使用していると思います。 – AxelH
ありがとう、AxelH、しかし、私はちょうど問題を見つけました。問題は、この(現在更新されている)コードに基づいてカーソルを誤ってクローンしたということでした:http://stackoverflow.com/a/40008872/1617737あまりにも多くの遅い夜...:/ –
実際には、あなたはINTEGER型のgetIntを使用しましたが、あなたはこれがLongを格納できると言っています。 SQliteはいくつかの奇妙なタイプの名前を使用します... – AxelH