android - Cursor getInt 返回负值

标签 android sql integer

起初我想注意英语不是我的母语,希望我们不要有误解

我在 Android 上写了一个简单的应用程序,发现了一个问题,也解决了它,但无论如何我想知道为什么会这样。

我创建了一个sql表:

public static final String CREATE_TABLE_ENTRIES = " CREATE TABLE "
            + TABLE_ENTRIES + " ( " + KEY_ID + " TEXT PRIMARY KEY, "
            + " content " + " TEXT, "
            + " title" + " TEXT, "
            + " image " + " TEXT, "
            + " date " + " INTEGER, " + ")";

并以这种方式将数据放入其中:

SQLiteDatabase db = mStorage.getWritableDatabase();
ContentValues tempValues = new ContentValues();
tempValues.put("id", entry.id);
tempValues.put("content", entry.content);
tempValues.put("title", entry.title);
tempValues.put("image", entry.image);
tempValues.put("date", entry.date);  // int date; I use Unix time
db.insert(contentType, null, tempValues);

现在.. 一切正常,我使用 this application 进行了验证,存储的值是可以的。

尽管如此,当我尝试使用 cursor.getInt(cursor.getColumnIndex("date")) 获取日期值时,我得到 1) 错误的值 2) 它的负值(如 -1004124 )

所以,我尝试用 getLong 替换它,瞧!我得到了我的 unix 时间。

问题是 - 这里的 getInt 有什么问题?

最佳答案

您确定您使用的是 unixtime(纪元以来的秒数)而不是例如Java 系统时间(自纪元以来的毫秒数)?

例如,unixtime 1387233645 非常适合 32 位 int。

但是,毫秒标记 1387233645000 对于 32 位来说太大了。在十六进制中,它是 0x142fd9191c8。取底部 32 位后,我们得到 0xfd9191c8,当被解释为 Java int 时,它是十进制的 -40791608,即带符号的二进制补码 32 位整数.

关于android - Cursor getInt 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670376/

相关文章:

java - 重新进入应用程序后将最后选择的图像加载到 ImageView 中

android - 如何在 Samsung Galaxy Tab 10.1 上全屏播放视频

sql - 如何向 "expand"当前有一个字段表示重复记录的表写入 sql 查询?

mysql - 如何获取最大数量用户投票的最大评分MovieId

java - 字符串仅包含 2 个整数 - Java

ruby-on-rails - Rails 3 - 将整数的一部分与其他整数进行比较

android - *任务菜单*中的应用程序图标未更改?

android - 如何关闭/销毁 android 中的 Firebase 引用?

mysql - 使用 SQL 转换表 - 行作为列

javascript - 将 float 重新解释为整数