一尘不染

游标getInt返回负值

sql

起初我想注意到英语不是我的母语,无论我希望我们不会误会

我在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);

现在..一切正常,我使用此应用程序进行了验证,可以存储的值正确。

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

因此,我尝试用getLong和voila替换它!我得到我的Unix时间。

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


阅读 171

收藏
2021-03-08

共1个答案

一尘不染

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

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

但是,毫秒戳1387233645000对于32位而言太大。以十六进制表示0x142fd9191c8。取低32位,当解释为Java(即带符号的二进制补码32位整数)时,留给我们的0xfd9191c8-40791608十进制int数。

2021-03-08