2016-10-13 5 views
4

私のデータベーステーブルにINTEGERというカラムがあり、それに1476355625598という値を(既存のローを更新することによって)保存しました。Android SQLite long値がint値として取得/キャストされる

クエリを実行して値をすぐに確認すると、同じ正しい値が返され、1476355625598が返されます。

しかし、IntentServiceが後で値を取得すると、-1113124226という値が返されています。

-1113124226は、(int)1476355625598と同じ値です。

この列を変更するすべてのコード行にデバッグ出力を追加しました。値を更新している他のデータベース操作がないことを確認できます。

だから、何かが私の長いintに鋳造されているようだ...任意のアイデアどのように/なぜこれが起こっている可能性がありますか?

NB - 私が保存している値は、タイムスタンプ(ミリ秒形式)です。これは、文字列形式で保存する方が望ましいです。

UPDATE

私のデータベースは、コンテンツプロバイダ経由でアクセス可能ですので、私は私のMyApplicationというクラスにコンテンツオブザーバを追加しました。問題のテーブルの他の更新は報告されません。今は解決

UPDATE#2

問題。コメントを参照してください...

+0

データベースからどのように値を取得しますか?あなたは長い価値を得ようとしましたか?あなた(または使用するシステム)がCursor上でIntegerのゲッターを使用していると思います。 – AxelH

+0

ありがとう、AxelH、しかし、私はちょうど問題を見つけました。問題は、この(現在更新されている)コードに基づいてカーソルを誤ってクローンしたということでした:http://stackoverflow.com/a/40008872/1617737あまりにも多くの遅い夜...:/ –

+0

実際には、あなたはINTEGER型のgetIntを使用しましたが、あなたはこれがLongを格納できると言っています。 SQliteはいくつかの奇妙なタイプの名前を使用します... – AxelH

答えて

1

私はこれを書く時間が来る前にOPが彼のエラーを見つけるが、私はまだそれを閉じるために投稿します。 OPは自分が望むなら自分で追加することができます(ハードな気分ではありません)。(これは後に他の人に迷惑をかけないようにします...)

例外はありませんが、カーソル。値がINTEGERに格納されている場合でも、この列はlongを保持できるため、getLong(int)またはgetLong(String)メソッドを使用して値を取得する必要があります。そうでない場合、JAVAは値を例外として切り捨てます。問題の

、ゲッターは存在しないが、他のPOSTのOPポストと答え:https://stackoverflow.com/a/40008872/1617737

彼はカーソルを複製する方法このショー。これは、NUMERIC SqliteTypeにgetLongの代わりにgetIntを使用したことです。

関連する問題