起初我想注意英语不是我的母语,希望我们不要有误解
我在 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/